<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Symbol eXtension</title>
	<atom:link href="http://syx.symboltech.hu/feed/" rel="self" type="application/rss+xml" />
	<link>http://syx.symboltech.hu</link>
	<description>Bővítések végtelen tárháza</description>
	<lastBuildDate>Wed, 16 May 2012 07:56:29 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Bejelentkezés kezelés WebMethod-ok esetén</title>
		<link>http://syx.symboltech.hu/fejlesztesi-kisokos/saas-intranet/bejelentkezes-kezeles-webmethod-ok-eseten/</link>
		<comments>http://syx.symboltech.hu/fejlesztesi-kisokos/saas-intranet/bejelentkezes-kezeles-webmethod-ok-eseten/#comments</comments>
		<pubDate>Tue, 13 Sep 2011 11:40:50 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[SaaS és Intranet]]></category>
		<category><![CDATA[authentication]]></category>
		<category><![CDATA[login]]></category>
		<category><![CDATA[user]]></category>

		<guid isPermaLink="false">http://syx.symboltech.hu/?p=419</guid>
		<description><![CDATA[Session objektumon keresztül elérhető az Authentication osztály, amely a bejelentkezés műveletét végzi és a jogosultságokat kezeli. Használható metódusok és tulajdonságok: bool Login(string username, string password): Bejelentkezés. void Logout(): Kijelentkezés bool Valid: Érvényes bejelentkezés-e? LoggedInWebUserInfo: Bejelentkezett felhasználó adatai HasPermission(int permission): SyX jogosultság ellenőrzése HasSymbolPermission(SymbolPermission permission): Symbol Ügyvitel jogosultság ellenőrzése &#160; &#160; &#160; &#160; &#160; &#160;]]></description>
			<content:encoded><![CDATA[<p>Session objektumon keresztül elérhető az <strong>Authentication</strong> osztály, amely a bejelentkezés műveletét végzi és a jogosultságokat kezeli.</p>
<p>Használható metódusok és tulajdonságok:</p>
<ul>
<li><strong>bool Login(string username, string password)</strong>: Bejelentkezés.</li>
<li><strong>void Logout()</strong>: Kijelentkezés</li>
<li><strong>bool Valid</strong>: Érvényes bejelentkezés-e?</li>
<li><strong>LoggedInWebUserInfo</strong>: Bejelentkezett felhasználó adatai</li>
<li><strong>HasPermission(int permission)</strong>: SyX jogosultság ellenőrzése</li>
<li><strong>HasSymbolPermission(SymbolPermission permission)</strong>: Symbol Ügyvitel jogosultság ellenőrzése</li>
</ul>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://syx.symboltech.hu/fejlesztesi-kisokos/saas-intranet/bejelentkezes-kezeles-webmethod-ok-eseten/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Munkafolyamat kezelés (session) webmetódusok esetén</title>
		<link>http://syx.symboltech.hu/fejlesztesi-kisokos/saas-intranet/munkafolyamat-kezeles-session-webmetodusok-eseten/</link>
		<comments>http://syx.symboltech.hu/fejlesztesi-kisokos/saas-intranet/munkafolyamat-kezeles-session-webmetodusok-eseten/#comments</comments>
		<pubDate>Wed, 07 Sep 2011 12:21:17 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[SaaS és Intranet]]></category>
		<category><![CDATA[cookie]]></category>
		<category><![CDATA[munkafolyamat]]></category>
		<category><![CDATA[session]]></category>

		<guid isPermaLink="false">http://syx.symboltech.hu/?p=406</guid>
		<description><![CDATA[A webes kiszolgáló alkalmazások valamilyen módon kell, hogy kezeljenek munkafolyamatokat. Az alábbi tipikus példák megvilágítják, miért kell munkaFOLYAMATOKban gondolkodni és miért jó a cookie-kra alapozott szerver oldali session kezelés. A felhasználó egyszer lépjen be. Nyilvánvaló, hogy a felhasználó csak egyszer szeretne belépni a rendszerbe és nem szeretné magát azonosítani minden lépés elején vagy végén. Ilyen [...]]]></description>
			<content:encoded><![CDATA[<p>A webes kiszolgáló alkalmazások valamilyen módon kell, hogy kezeljenek <strong>munkafolyamatokat</strong>. Az alábbi tipikus példák megvilágítják, miért kell munkaFOLYAMATOKban gondolkodni és miért jó a cookie-kra alapozott szerver oldali session kezelés.</p>
<ul>
<li><strong>A felhasználó egyszer lépjen be.</strong> Nyilvánvaló, hogy a felhasználó csak egyszer szeretne belépni a rendszerbe és nem szeretné magát azonosítani minden lépés elején vagy végén. Ilyen esetben a bejelentkezett felhasználó adatait szerver oldali session-be rakjuk el és ahol kell, tudjuk ellenőrizni/felhasználni.</li>
<li><strong>Korábbi műveletek tárolása.</strong> A belépett felhasználó szeretné látni, hogy a munkafolyamat közben mit végzett el. Mivel tetszőleges adatokat tárolhatunk a session-ökben, korábban meglátogatott oldalak/funkció tárolására is lehetőség van.</li>
</ul>
<p>A session kezelés a SyX SDK-ban <strong>memóriában</strong> valósul meg. A Symbol Ügyvitel vagy a SyX beépülő újraindítása minden session-t megszűntet. A session-ök a cookie-k lejárati idejétől függetlenül, az utolsó kattintás után <strong>maximum 30percig élnek</strong>.</p>
<p>&nbsp;</p>
<p>Az alábbi módon használhatóak a session-ök és az abban tárolt változók.</p>
<p>A webmetódusok törzsében használhatjuk a Session változót, amely egy névvel indexelhető Dictionary. Használati módja a következő:</p>
<p><strong>Session["UserName"] = &#8220;SymbolDefaultUser&#8221;;<br />
</strong>// a megadott string értéke eltárolásra kerül az UserName munkafolyamat változóban.</p>
<p><strong>x = Session["UserName"];<br />
</strong>// az UserName munkafolyamat változó tartalmát érhetjük el.</p>
<p>&nbsp;</p>
<p>A Session változó Strings tulajdonsága a munkafolyamat változókat nem Object típusként, hanem <strong>String típusként</strong> kezeli adatkonverzió nélkül.</p>
<p><strong><strong>Session.Strings["UserName"] = &#8220;SymbolDefaultUser&#8221;;</strong></strong></p>
<p><strong><strong></strong></strong><strong>string value = Session.Strings["UserName"];</strong></p>
<ol style="display: inline !important;">
<li style="display: inline !important;"><strong><br />
</strong></li>
</ol>
<div>
<p>&nbsp;</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://syx.symboltech.hu/fejlesztesi-kisokos/saas-intranet/munkafolyamat-kezeles-session-webmetodusok-eseten/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Webmetódusok &#8211; Tömörített adatküldés</title>
		<link>http://syx.symboltech.hu/fejlesztesi-kisokos/saas-intranet/webmetodusok-tomoritett-adatkuldes/</link>
		<comments>http://syx.symboltech.hu/fejlesztesi-kisokos/saas-intranet/webmetodusok-tomoritett-adatkuldes/#comments</comments>
		<pubDate>Wed, 07 Sep 2011 08:49:17 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[SaaS és Intranet]]></category>
		<category><![CDATA[3G]]></category>
		<category><![CDATA[Accept-Encoding]]></category>
		<category><![CDATA[deflate]]></category>
		<category><![CDATA[EDGE]]></category>
		<category><![CDATA[GSM]]></category>
		<category><![CDATA[gzip]]></category>
		<category><![CDATA[mobil adatkapcsolat]]></category>

		<guid isPermaLink="false">http://syx.symboltech.hu/?p=404</guid>
		<description><![CDATA[Amennyiben a böngésző engedélyezi a tömörített adatok fogadását (gzip, deflate), úgy a SyX-ek a webmetódusok HTML eredményét tömörített formátumban adják vissza. A Request Accept-Encoding értéke alapján (gzip, deflate) eldöntésre kerül, hogy a böngésző képes-e tömörített adatfolyam feldolgozására. Amennyiben képes, úgy a HTML tartalom GZIP tömörítve kerül kiküldésre. A fenti működés automatikus, semmilyen egyéb beállításra nincs [...]]]></description>
			<content:encoded><![CDATA[<p>Amennyiben a böngésző engedélyezi a tömörített adatok fogadását (gzip, deflate), úgy a SyX-ek a webmetódusok HTML eredményét tömörített formátumban adják vissza.</p>
<p>A Request <strong>Accept-Encoding</strong> értéke alapján (gzip, deflate) eldöntésre kerül, hogy a böngésző képes-e tömörített adatfolyam feldolgozására. Amennyiben képes, úgy a HTML tartalom <strong>GZIP</strong> tömörítve kerül kiküldésre. A fenti működés automatikus, semmilyen egyéb beállításra nincs szükség.</p>
<p>Ennek segítségével a <strong>mobil adatkapcsolatokon</strong> (GSM, EDGE, 3G) gyorsabb oldalbetöltődés érhető el.</p>
<p>A működés nem befolyásolja az XML alapú vagy elemi adattípusokkal való kommunikációt, csupán a <strong>HtmlResponse</strong> visszatérési értékű metódusokkal működik együtt.</p>
]]></content:encoded>
			<wfw:commentRss>http://syx.symboltech.hu/fejlesztesi-kisokos/saas-intranet/webmetodusok-tomoritett-adatkuldes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Web kérések és forgalom naplózása</title>
		<link>http://syx.symboltech.hu/fejlesztesi-kisokos/saas-intranet/web-keresek-es-forgalom-naplozasa/</link>
		<comments>http://syx.symboltech.hu/fejlesztesi-kisokos/saas-intranet/web-keresek-es-forgalom-naplozasa/#comments</comments>
		<pubDate>Wed, 07 Sep 2011 07:40:16 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[SaaS és Intranet]]></category>
		<category><![CDATA[log]]></category>
		<category><![CDATA[napló]]></category>
		<category><![CDATA[weblog]]></category>
		<category><![CDATA[weblogattribute]]></category>

		<guid isPermaLink="false">http://syx.symboltech.hu/?p=402</guid>
		<description><![CDATA[Hibakeresési, tesztelése, optimalizálási célból előnyös, ha a webmethod-ok hívásait naplózni lehet. Erre a SyX SDK új verziója lehetőséget biztosít. A WebLog attribútum beillesztése következtében a megadott fájlnevek alatt létrejön az elérési napló és a hibanapló. Ha valamely fájlt nem adjuk meg, akkor olyan típusú napló nem készül. Az elérési napló minden lekérdezést egy-egy sorban jelez, [...]]]></description>
			<content:encoded><![CDATA[<p>Hibakeresési, tesztelése, optimalizálási célból előnyös, ha a webmethod-ok hívásait naplózni lehet. Erre a SyX SDK új verziója lehetőséget biztosít.</p>
<p>A <strong>WebLog</strong> attribútum beillesztése következtében a megadott fájlnevek alatt létrejön az<strong> elérési napló</strong> és a <strong>hibanapló</strong>. Ha valamely fájlt nem adjuk meg, akkor olyan típusú napló nem készül. Az elérési napló minden lekérdezést egy-egy sorban jelez, a hibanapló csak a 200-as HTTP választól eltérő eseményeket jelzi.</p>
<p><em>A naplózás gyakori művelet, egy oldal lekérésekor 3-10 naplóbejegyzés is készülhet. Emiatt a naplófájlokat csak helyi meghajtón szabad elhelyezni, nehogy a kiszolgálás teljesítménye csökkenjen!</em></p>
<p>Példa:</p>
<p><strong>[WebLog("c:\\weblog\\access.log", "c:\\weblog\\error.log")]</strong></p>
<p>Az attribútum következtében a c:\weblog mappában készül el a két fájl.</p>
]]></content:encoded>
			<wfw:commentRss>http://syx.symboltech.hu/fejlesztesi-kisokos/saas-intranet/web-keresek-es-forgalom-naplozasa/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Böngésző tulajdonságai</title>
		<link>http://syx.symboltech.hu/fejlesztesi-kisokos/saas-intranet/bongeszo-tulajdonsagai/</link>
		<comments>http://syx.symboltech.hu/fejlesztesi-kisokos/saas-intranet/bongeszo-tulajdonsagai/#comments</comments>
		<pubDate>Tue, 06 Sep 2011 13:12:49 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[SaaS és Intranet]]></category>
		<category><![CDATA[mobil böngésző]]></category>
		<category><![CDATA[RequestContext]]></category>
		<category><![CDATA[saas]]></category>

		<guid isPermaLink="false">http://syx.symboltech.hu/?p=395</guid>
		<description><![CDATA[SaaS működés kiszolgálása közben felmerülhet az igény, hogy tudjuk, honnan érkezett a kérés, milyen böngészőben jelennek meg az adatok. A kérdések megválaszolására létrehoztuk a SyX SDK-ban a GetRequestContext() metódust, amely egy RequestContext objektumot ad vissza. Ebben az objektumban megtalálható minden, ami a kéréssel kapcsolatos: UserAgent Kérés IP címe Kérés HOST neve Elfogadott nyelvek Cookie információk [...]]]></description>
			<content:encoded><![CDATA[<p>SaaS működés kiszolgálása közben felmerülhet az igény, hogy tudjuk, honnan érkezett a kérés, milyen böngészőben jelennek meg az adatok.</p>
<p>A kérdések megválaszolására létrehoztuk a SyX SDK-ban a <strong>GetRequestContext()</strong> metódust, amely egy <strong>RequestContext</strong> objektumot ad vissza. Ebben az objektumban megtalálható minden, ami a kéréssel kapcsolatos:</p>
<ul>
<li>UserAgent</li>
<li>Kérés IP címe</li>
<li>Kérés HOST neve</li>
<li>Elfogadott nyelvek</li>
<li>Cookie információk</li>
</ul>
<p>Ezen túl pedig egy beépített metódus (<strong>IsMobile</strong>) megállapítja, hogy mobil böngészőről van-e szó. Ilyen esetben kisebb tartalmat szoktak megjelenteni a portálok.</p>
<p><em>Csak webkiszolgáló üzemmód esetén használható a metódus, egyéb esetben NULL értéket ad vissza; webkiszolgáló működésnek minősül a desktop és a 365/24-es működés is!</em></p>
<p>Példa:</p>
<pre>[WebMethod("Display User-Agent")]
public HtmlResponse UserAgent()
{
    RequestContext ctx = <strong>GetRequestContext</strong>();

    StringBuilder sb = new StringBuilder();
    if (ctx.<strong>IsMobile</strong>)
        sb.AppendLine("Mobile");
    sb.AppendLine(ThreadName);
    sb.AppendLine(String.Join(", ", ctx.Request.AcceptTypes));
    sb.AppendLine(ctx.Request.RequestTraceIdentifier.ToString());
    sb.AppendLine(ctx.Request.ServiceName);
    sb.AppendLine(ctx.Request.<strong>UserAgent</strong>);
    sb.AppendLine(ctx.Request.UserHostAddress);
    sb.AppendLine(ctx.Request.UserHostName);
    sb.AppendLine(String.Join(", ", ctx.Request.UserLanguages));

    return new HtmlResponse(sb.ToString());
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://syx.symboltech.hu/fejlesztesi-kisokos/saas-intranet/bongeszo-tulajdonsagai/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Metódusok időzítése</title>
		<link>http://syx.symboltech.hu/fejlesztesi-kisokos/keretrendszer/metodusok-idozitese/</link>
		<comments>http://syx.symboltech.hu/fejlesztesi-kisokos/keretrendszer/metodusok-idozitese/#comments</comments>
		<pubDate>Wed, 24 Aug 2011 13:51:46 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Keretrendszer]]></category>
		<category><![CDATA[cron]]></category>
		<category><![CDATA[CronScheduler]]></category>
		<category><![CDATA[schedule]]></category>
		<category><![CDATA[SyX SDK]]></category>

		<guid isPermaLink="false">http://syx.symboltech.hu/?p=384</guid>
		<description><![CDATA[Egy keretrendszer folyamatosan fejlődik, ahogy az igények azt indokolják. Egyre gyakrabban merül fel, hogy időzítetten kell valamit futtatni. Legyen az adatok letöltése, információk exportálása vagy SMS küldése. Ennek kiszolgálására bővítettük a SyX SDK-t. Minden paraméter nélküli metódus meghívható a [CronScheduler("*/2 9-17 * * 1,2,3,4,5")] attribútummal. Az attribútum paramétere egy Cron jellegű időzítési string. A beépített időzítő [...]]]></description>
			<content:encoded><![CDATA[<p>Egy keretrendszer folyamatosan fejlődik, ahogy az igények azt indokolják. Egyre gyakrabban merül fel, hogy időzítetten kell valamit futtatni. Legyen az adatok letöltése, információk exportálása vagy SMS küldése. Ennek kiszolgálására bővítettük a SyX SDK-t.</p>
<p>Minden paraméter nélküli metódus meghívható a</p>
<p><strong>[CronScheduler("*/2 9-17 * * 1,2,3,4,5")]</strong></p>
<p>attribútummal. Az attribútum paramétere egy Cron jellegű időzítési string. A beépített időzítő a Cron paraméternek megfelelő gyakorisággal futtatja a metódust. (<a href="http://en.wikipedia.org/wiki/Cron">http://en.wikipedia.org/wiki/Cron</a>)</p>
<p>A példában szereplő string minden munkanapon (H-P) 9-17 óráig minden páros percben futtat valamit.</p>
<p>A Cron időzítés előnye, hogy nem kell nekünk saját Timer-t létrehozni, a rendszer ezt optimalizáltan megteszi helyettünk. Hátránya viszont, hogy csak állandó időzítési idejű metódusok hozhatóak létre, felhasználói beállítássá nem lehető az időzítés gyakorisága.</p>
<p><em>Megjegyzések:</em></p>
<ul>
<li><em>A metódus továbbra is megjelölhető Modul függő opciókkal (pl.: csak gyártás modul esetén fusson)</em></li>
<li><em>A metódus továbbra is megjelölhető Permission attribútummal (csak megfelelő jogosultság esetén fut)</em></li>
<li><em>A metódust a hagyományos módon menüpontként vagy funkció gombként is használhatjuk. Megfordítva: meglévő metódust is elláthatunk CronScheduler attribútummal.</em></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://syx.symboltech.hu/fejlesztesi-kisokos/keretrendszer/metodusok-idozitese/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SyX jogosultságok</title>
		<link>http://syx.symboltech.hu/fejlesztesi-kisokos/keretrendszer/syx-jogosultsagok/</link>
		<comments>http://syx.symboltech.hu/fejlesztesi-kisokos/keretrendszer/syx-jogosultsagok/#comments</comments>
		<pubDate>Wed, 24 Aug 2011 10:39:06 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Keretrendszer]]></category>
		<category><![CDATA[felhasználó]]></category>
		<category><![CDATA[jogosultság]]></category>
		<category><![CDATA[menüpontok]]></category>
		<category><![CDATA[permission]]></category>
		<category><![CDATA[SyX]]></category>
		<category><![CDATA[webmethod]]></category>

		<guid isPermaLink="false">http://syx.symboltech.hu/?p=379</guid>
		<description><![CDATA[Nagycéges környezetben gyakori, hogy a jogosultsági rendszerrel csak bizonyos menüpontokat engedünk elérni a felhasználóknak. Mostantól a SyX beépülők által létrehozott menüpontok, gombok, funkciók is jogosultsághoz köthetőek. Ehhez a SyX készítőjének felül kell írnia a GetPermissionDescriptiors() metódust, amelyben int-&#62;string párokat létrehozva definiálhatja a jogosultságokat. Ezek a jogosultságok a felhasználói / csoport jogosultságok között megjelennek és felhasználónként [...]]]></description>
			<content:encoded><![CDATA[<p>Nagycéges környezetben gyakori, hogy a jogosultsági rendszerrel csak bizonyos menüpontokat engedünk elérni a felhasználóknak. Mostantól a SyX beépülők által létrehozott menüpontok, gombok, funkciók is jogosultsághoz köthetőek.</p>
<p>Ehhez a SyX készítőjének felül kell írnia a <strong>GetPermissionDescriptiors()</strong> metódust, amelyben int-&gt;string párokat létrehozva definiálhatja a jogosultságokat. Ezek a jogosultságok a felhasználói / csoport jogosultságok között megjelennek és felhasználónként megadhatóak / elvehetőek.</p>
<p>A <strong>[Permission(int perm)]</strong> attribútum felhasználásával pedig minden SyX funkcióhoz meg lehet adni, hogy milyen jog kell a végrehajtásához. Mit lehet védeni jogosultságokkal?</p>
<ul>
<li><strong>Teljes SyX védelme:</strong> Be sem tudja tölteni (hibaüzenettel jelenik meg) a SyX beépülőt az, aki egy teljesen védett SyX-hez nem kapott jogot.</li>
<li><strong>Menüpontok:</strong> Az új menüpontok nem látszanak azoknál a felhasználóknál, akik nem kaptak jogot hozzá.</li>
<li><strong>Műveleti gombok:</strong> Az új műveleti gombok nem látszanak azoknál a felhasználóknál, akik nem kaptak jogot hozzá.</li>
<li><strong>WebMethod-ok:</strong> A SyX által létrehozott webszerver adott funkcióihoz a felhasználó nem férhet hozzá ha nincs joga. A funkciók listáján a funkció nem látszik, de az URL-t közvetlenül beírva is 404-es hibaüzenettel válaszol a szerver.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://syx.symboltech.hu/fejlesztesi-kisokos/keretrendszer/syx-jogosultsagok/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>8. Statikus HTML elemek használata csomagban</title>
		<link>http://syx.symboltech.hu/fejlesztesi-kisokos/saas-intranet/8-statikus-html-elemek-hasznalata-csomagban/</link>
		<comments>http://syx.symboltech.hu/fejlesztesi-kisokos/saas-intranet/8-statikus-html-elemek-hasznalata-csomagban/#comments</comments>
		<pubDate>Thu, 21 Jul 2011 23:23:41 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[SaaS és Intranet]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[js]]></category>
		<category><![CDATA[képfájlok]]></category>
		<category><![CDATA[statikus tartalom]]></category>

		<guid isPermaLink="false">http://syx.symboltech.hu/?p=373</guid>
		<description><![CDATA[A statikus HTML tartalom (js, css, kép fájlok) elhelyezése kis és közepes fájl mennyiség esetén nem okoz gondot. De egyre gyakoribb valamelyik JS függvénykönyvtár használata (prototype, dojo, jsScrolling, Sajax, jQuery, stb.). Ezek pedig általában több, mint 100 fájlt is tartalmazhatnak. Hagyományos webszerver esetén nincs más dolgunk, mint a ZIP állomány tartalmát kicsomagolni a web kiszolgáló [...]]]></description>
			<content:encoded><![CDATA[<p>A statikus HTML tartalom (js, css, kép fájlok) elhelyezése kis és közepes fájl mennyiség esetén nem okoz gondot. De egyre gyakoribb valamelyik JS függvénykönyvtár használata (prototype, dojo, jsScrolling, Sajax, jQuery, stb.). Ezek pedig általában több, mint 100 fájlt is tartalmazhatnak. Hagyományos webszerver esetén nincs más dolgunk, mint a ZIP állomány tartalmát kicsomagolni a web kiszolgáló egyik könyvtárába. Nézzük, hogy oldható meg egy SaaS-es SyX esetén!</p>
<p>Nagy mennyiségű statikus fájl kezelésére vezettük be a <strong>WebStaticResourcePack</strong> attribútumot. A WebStaticResource mintájára egy virtuális könyvtárat kell megadni, ahova fel kívánjuk fűzni (mount) a statikus fájlokat. Emellett a Resource típusát és a resource-ban elhelyezett<strong> ZIP fájl nevét</strong> kell megadnunk.</p>
<p><strong>[WebStaticResourcePack("jquery", typeof(StatRes), "examples")]</strong></p>
<p>A fenti példa a jquery könyvtárban &#8220;helyezi el&#8221; a StatRes resource fájlunk examples.zip tartalmát. Például ha a böngésző vagy valamely JS script el akarja érni a <a href="http://srv.hu/jquery/styles/default/all.css">http://srv.hu/jquery/styles/default/all.css</a> fájlt, akkor a ZIP fájlban lévő <strong>/styles/default/all.css</strong> fájl kerül kiszolgálásra.</p>
<p>&nbsp;</p>
<p>A fenti megoldás &#8211; a belső gyorsítótáraknak hála &#8211; <strong>8-20ms</strong>-os válaszidővel működik, közvetlenül a memóriából szolgálja ki a kéréseket, a többszálas (thread) mechanizmust kihasználva. (A fenti idő vetekszik a célirányos Linux/IIS szerverek válaszidejével).</p>
<p>Fontos megjegyzeni, hogy a ZIP fájlban történt módosítás a SyX újrafordításával kerül érvényesítésre, amely 2-5mp.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://syx.symboltech.hu/fejlesztesi-kisokos/saas-intranet/8-statikus-html-elemek-hasznalata-csomagban/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Szálban fut, de ablakot jelenít meg&#8230;</title>
		<link>http://syx.symboltech.hu/fejlesztesi-kisokos/keretrendszer/szalban-fut-de-ablakot-jelenit-meg/</link>
		<comments>http://syx.symboltech.hu/fejlesztesi-kisokos/keretrendszer/szalban-fut-de-ablakot-jelenit-meg/#comments</comments>
		<pubDate>Thu, 16 Jun 2011 11:19:43 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Felhasználói felület]]></category>
		<category><![CDATA[Keretrendszer]]></category>
		<category><![CDATA[invokethreadsafe]]></category>
		<category><![CDATA[thread]]></category>
		<category><![CDATA[threadsafe]]></category>
		<category><![CDATA[többszálas működés]]></category>

		<guid isPermaLink="false">http://syx.symboltech.hu/?p=369</guid>
		<description><![CDATA[A SyX beépülők több helyen használhatnak szálakat működésük közben. A fejlesztő használhat &#8220;kézzel&#8221; szálakat, de az SaaS működés minden esetben szálban kerül kiszolgálásra. Ritkán, de előfordulhat, hogy a szál valamilyen felhasználói felületet is működtet. Példa erre, ha egy HTTP kérés hatására egy új számla ablak jelenik meg, amin még módosításokat lehet végezni. Ennek a több [...]]]></description>
			<content:encoded><![CDATA[<p>A SyX beépülők több helyen használhatnak szálakat működésük közben. A fejlesztő használhat &#8220;kézzel&#8221; szálakat, de az SaaS működés minden esetben szálban kerül kiszolgálásra. Ritkán, de előfordulhat, hogy a szál valamilyen felhasználói felületet is működtet. Példa erre, ha egy HTTP kérés hatására egy új számla ablak jelenik meg, amin még módosításokat lehet végezni.</p>
<p>Ennek a több szálas problémának a megoldására vezettük be a keretrendszerben az alábbi metódust:</p>
<p><strong>InvokeThreadSafe</strong>(<strong>MethodInvoker </strong>invoker)</p>
<p>Az InvokeThreadSafe hívás során átadott (MethodInvoker-be beburkolt) metódus a főszálon, szinkronizáltan kerül végrehajtásra. Például egy újonnan, szálban létrehozott számla megjelenítise az alábbi módon valósítható meg:</p>
<p><strong>InvokeThreadSafe</strong>(new MethodInvoker(<strong>so.Display</strong>)) //so.Display() beépített metódusa minden Entity-nek.</p>
]]></content:encoded>
			<wfw:commentRss>http://syx.symboltech.hu/fejlesztesi-kisokos/keretrendszer/szalban-fut-de-ablakot-jelenit-meg/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>7. Statikus HTML elemek használata</title>
		<link>http://syx.symboltech.hu/fejlesztesi-kisokos/saas-intranet/7-statikus-html-elemek-hasznalata/</link>
		<comments>http://syx.symboltech.hu/fejlesztesi-kisokos/saas-intranet/7-statikus-html-elemek-hasznalata/#comments</comments>
		<pubDate>Mon, 13 Jun 2011 23:15:36 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[SaaS és Intranet]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[képfájlok]]></category>
		<category><![CDATA[statikus]]></category>
		<category><![CDATA[statikus html]]></category>

		<guid isPermaLink="false">http://syx.symboltech.hu/?p=361</guid>
		<description><![CDATA[Az Intranet portálok mindegyike tartalmaz több statikus webes elemet. Ilyenek például a konstans képek (cornet.jpg) illetve a javascript függvénytárak (jQuery.js). Az Intranet portál kiszolgálója a Symbol Ügyvitel rendszer, így a böngészők számára ezeket a fájlokat is innen kell tudni kiszolgálni.   Hagyományos megoldás A hagyományos megoldás az lenne, ha a fájlok mindegyikéhez létrehozunk egy megfelelő [...]]]></description>
			<content:encoded><![CDATA[<p>Az Intranet portálok mindegyike tartalmaz több statikus webes elemet. Ilyenek például a konstans képek (cornet.jpg) illetve a javascript függvénytárak (jQuery.js). Az Intranet portál kiszolgálója a Symbol Ügyvitel rendszer, így a böngészők számára ezeket a fájlokat is innen kell tudni kiszolgálni.</p>
<p><strong> </strong></p>
<p><strong>Hagyományos megoldás</strong></p>
<p>A hagyományos megoldás az lenne, ha a fájlok mindegyikéhez létrehozunk egy megfelelő nevű metódust. Például a <strong>jQuery.js </strong>fájlhoz a <strong>jQuery_js</strong>() metódust kellene definiálni. A hagyományos megoldás az alábbi problémákat veti fel:</p>
<ul>
<li>Nehézkesen bővíthető a fájlok listája</li>
<li>Elnevezési konvenciók szem előtt tartása problémát okozhat</li>
<li>Nem lehet alkönyvtárakban elhelyezni a fájlokat (/images/main.jpg, /js/jQuery.js)</li>
</ul>
<p><strong> </strong></p>
<p><strong>Statikus erőforrás megoldás</strong></p>
<p>A statikus fájlok elhelyezésének módja .NET Resource fájl(ok) létrehozása. Az ott tárolt fájlok kiszolgálását megkönnyítendő a rendszer tartalmazza a WebStaticResourceAttribute attrubútumot. Ennek használatával egy meglévő Resource fájlt felfűzhetünk a paraméterként megadott könyvtárba.</p>
<p>[WebStaticResourceAttribute("<strong>/resources/images</strong>", typeof(<strong>Images</strong>))]</p>
<p>A fenti példa az Images statikus erőforrás osztály elemeit elérhetővé teszi a /resources/images könyvtár alatt. Ha az Images erőforrás tartalmaz egy main.jpg nevű fájlt (kép vagy byte[]), úgy a <strong>localhost:port/resources/images/main.jpg</strong> URL meghívásával az erőfárrásban tárolt fájl kiszolgálásra kerül. Az erőforrásban tárolt adatok kiszolgálása is több szálon folyik, nagy mennyiségű adat vagy nagy méretű kép esetén is megvalósul a párhuzamos, kiegyensúlyozott kiszolgálás.</p>
<p><strong> </strong></p>
<p><strong>Konklúzió</strong></p>
<p>A webfejlesztők módszereihez igazodva, egy új kép- vagy javascript fájl FTP-re való feltöltése helyett ugyanennyi ráfordítással a fájlt el kell helyezni egy szabványos Resource fájlban. (A Resource fájlban való jelenlét a fájlról egy másolatot készít a Resource könyvtárban. A fájl másolatának szerkesztése vagy felülírása lehetőséget biztosít a fájl megváltoztatására az erőforrásban.)</p>
]]></content:encoded>
			<wfw:commentRss>http://syx.symboltech.hu/fejlesztesi-kisokos/saas-intranet/7-statikus-html-elemek-hasznalata/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>6. Példa osztályok és metódushívás tesztelése</title>
		<link>http://syx.symboltech.hu/fejlesztesi-kisokos/saas-intranet/6-pelda-osztalyok-es-metodushivas-tesztelese/</link>
		<comments>http://syx.symboltech.hu/fejlesztesi-kisokos/saas-intranet/6-pelda-osztalyok-es-metodushivas-tesztelese/#comments</comments>
		<pubDate>Mon, 13 Jun 2011 22:55:47 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[SaaS és Intranet]]></category>
		<category><![CDATA[példa letöltés]]></category>
		<category><![CDATA[példa osztály]]></category>
		<category><![CDATA[próbaform]]></category>
		<category><![CDATA[testform]]></category>

		<guid isPermaLink="false">http://syx.symboltech.hu/?p=353</guid>
		<description><![CDATA[Az SaaS metódusok jelentős része osztályokon (típusos, hierarchikus adathalmazokon) keresztül kommunikál. A bemenő adatok szinte kivétel nélkül XML formátumúak, gyakran a visszaadott érték is struktúrált adat (JSON formátum). Az osztályok forráskódban történő definiálása után szükség van egy olyan formátumú XML fájlra, amely megfelel az osztálynak.   Példa osztály letöltése Ilyen példa osztály tölthetünk le a metóduslista [...]]]></description>
			<content:encoded><![CDATA[<p>Az SaaS metódusok jelentős része osztályokon (típusos, hierarchikus adathalmazokon) keresztül kommunikál. A bemenő adatok szinte kivétel nélkül XML formátumúak, gyakran a visszaadott érték is struktúrált adat (JSON formátum). Az osztályok forráskódban történő definiálása után szükség van egy olyan formátumú XML fájlra, amely megfelel az osztálynak.</p>
<p><strong> </strong></p>
<p><strong>Példa osztály letöltése</strong></p>
<p>Ilyen példa osztály tölthetünk le a metóduslista egyik osztályára kattintva. Az osztály lehet bemenő paraméter vagy eredmény.</p>
<p><a href="http://syx.symboltech.hu/wp-content/uploads/2011/06/classsample.jpg"><img class="alignnone size-full wp-image-354" title="classsample" src="http://syx.symboltech.hu/wp-content/uploads/2011/06/classsample.jpg" alt="" width="556" height="66" /></a></p>
<p>A kattintás után a böngésző felajánlja az osztályt letöltésre. A példa fájlban minden mező a neki megfelelő adattal ki van töltve, listák és tömbök esetén 3-5 példa adat jelzi, hogy ismétlődési lehetőség is adott.</p>
<p><a href="http://syx.symboltech.hu/wp-content/uploads/2011/06/classsampledownload.jpg"><img class="size-medium wp-image-355 aligncenter" title="classsampledownload" src="http://syx.symboltech.hu/wp-content/uploads/2011/06/classsampledownload-300x210.jpg" alt="" width="300" height="210" /></a></p>
<p><strong>Adatkitöltő próbaform használata</strong></p>
<p>A letöltött és esetleg módosított XML formátum elküldéséhez nincs szükség külön alkalmazásra. A metódus neve melletti kis &#8220;cetlire&#8221; kattintva egy olyan, böngészőben megjelenő felületet kapunk, amelyen keresztül az XML fájl (vagy bármilyen más paraméter) elküldhető a metódusnak. Az elküldés után a végeredmény is elemezhető. A végeredmény lehet valamilyen hibakód, XML eredmény vagy információ arról, hogy egy fájl letöltődne.</p>
<p><a href="http://syx.symboltech.hu/wp-content/uploads/2011/06/testform.jpg"><img class="alignnone size-medium wp-image-356" title="testform" src="http://syx.symboltech.hu/wp-content/uploads/2011/06/testform-300x48.jpg" alt="" width="300" height="48" /></a></p>
<p>A próbaform egy külön ablakban jelenik meg és az alábbiak szerint néz ki</p>
<p><a href="http://syx.symboltech.hu/wp-content/uploads/2011/06/testformdisplay.jpg"><img class="alignnone size-medium wp-image-357" title="testformdisplay" src="http://syx.symboltech.hu/wp-content/uploads/2011/06/testformdisplay-300x253.jpg" alt="" width="300" height="253" /></a></p>
<p>Az eredmény csak akkor jelenik meg, ha a &#8220;Send data&#8221; gomb használatával az adatokat elküldjük. Az ablak korlátlan alkalommal használható, az elküldött adatok az adatbeviteli mezőkben újra megjelennek.</p>
]]></content:encoded>
			<wfw:commentRss>http://syx.symboltech.hu/fejlesztesi-kisokos/saas-intranet/6-pelda-osztalyok-es-metodushivas-tesztelese/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>5. Amit nem &#8220;szabad&#8221;</title>
		<link>http://syx.symboltech.hu/fejlesztesi-kisokos/saas-intranet/5-amit-nem-szabad/</link>
		<comments>http://syx.symboltech.hu/fejlesztesi-kisokos/saas-intranet/5-amit-nem-szabad/#comments</comments>
		<pubDate>Sun, 15 May 2011 20:56:53 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[SaaS és Intranet]]></category>
		<category><![CDATA[nem szabad]]></category>
		<category><![CDATA[tilos]]></category>
		<category><![CDATA[üzenetablak]]></category>

		<guid isPermaLink="false">http://syx.symboltech.hu/?p=318</guid>
		<description><![CDATA[Az SaaS működés elsődlegesen egy kiszolgáló tevékenység. Mivel a SyX környezetben a Symbol Ügyvitel alkalmazás végzi a kiszolgáló tevékenységet, elkerülhetetlen, hogy ki kelljen térnünk a hibás SyX használatra. Felhasználói tevékenység SaaS metódusban Nem szabad olyan SaaS metódust írni, amely valamilyen felhasználói tevékenységet végez (és nem ez az fő célja). Kerülni kell az olyan eseteket, amikor az [...]]]></description>
			<content:encoded><![CDATA[<p>Az SaaS működés elsődlegesen egy kiszolgáló tevékenység. Mivel a SyX környezetben a Symbol Ügyvitel alkalmazás végzi a kiszolgáló tevékenységet, elkerülhetetlen, hogy ki kelljen térnünk a hibás SyX használatra.</p>
<p><strong>Felhasználói tevékenység SaaS metódusban</strong></p>
<p>Nem szabad olyan SaaS metódust írni, amely valamilyen felhasználói tevékenységet végez (és nem ez az fő célja). Kerülni kell az olyan eseteket, amikor az SaaS metódus hívása létrehoz egy bizonylatot, de azt az adatok mentése helyett a Display() metódussal megjeleníti a kiszolgáló számítógépen.</p>
<p>Még nagyobb problémát okoz, ha a kiszolgáló számítógépen beavatkozást igénylő tevékenység kerül végrehajtásra, például megjelenik egy üzenetablak. Az alábbi WebMethod egy üzenetablakot jelenít meg a Symbol Ügyvitelben a linkre kattintva:</p>
<p>        [WebMethod("Példa web metódus")]<br />
        public void SampleWebMethod(<strong>int a, DateTime b</strong>)<br />
        {<br />
            <strong>MessageBoxInfo</strong>(String.Format(&#8220;{0} &#8211; {1}&#8221;, a, b), &#8220;Külső adat&#8221;);<br />
        }</p>
<p>Az üzenetablak ideje alatt a többi szálon a kiszolgálás zavartalanul folyik, de a böngésző az üzenetablak OK gombjának megnyomásáig várakozni fog.</p>
]]></content:encoded>
			<wfw:commentRss>http://syx.symboltech.hu/fejlesztesi-kisokos/saas-intranet/5-amit-nem-szabad/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>4. Hibakezelés és teljesítmény</title>
		<link>http://syx.symboltech.hu/fejlesztesi-kisokos/saas-intranet/4-hibakezeles-es-teljesitmeny/</link>
		<comments>http://syx.symboltech.hu/fejlesztesi-kisokos/saas-intranet/4-hibakezeles-es-teljesitmeny/#comments</comments>
		<pubDate>Sun, 15 May 2011 20:56:08 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[SaaS és Intranet]]></category>
		<category><![CDATA[200]]></category>
		<category><![CDATA[400]]></category>
		<category><![CDATA[403]]></category>
		<category><![CDATA[404]]></category>
		<category><![CDATA[500]]></category>
		<category><![CDATA[hibakezelés]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[http hiba]]></category>

		<guid isPermaLink="false">http://syx.symboltech.hu/?p=316</guid>
		<description><![CDATA[Hibakezelés A hibák kezelésére elsődlegesen felhasználhatjuk a HTTP protokoll saját hibakezelő rendszerét, amely 200-as eredményt ad vissza, amikor minden rendben van és 3xx, 4xx, 5xx hibákkal jelzi, ha hiba keletkezett. A SyX SaaS szolgáltatások az alábbi hibajelzési módot támogatják: 200: megfelelő működés 404: nem található a meghívott WebMethod (kis/nagybetű számít) 403: a ModuleDepends attribútum jelenléte miatt [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Hibakezelés</strong></p>
<p>A hibák kezelésére elsődlegesen felhasználhatjuk a HTTP protokoll saját hibakezelő rendszerét, amely 200-as eredményt ad vissza, amikor minden rendben van és 3xx, 4xx, 5xx hibákkal jelzi, ha hiba keletkezett.</p>
<p>A SyX SaaS szolgáltatások az alábbi hibajelzési módot támogatják:</p>
<ul>
<li>200: megfelelő működés</li>
<li>404: nem található a meghívott WebMethod (kis/nagybetű számít)</li>
<li>403: a ModuleDepends attribútum jelenléte miatt a WebMethod nem hívható meg</li>
<li>400: a WebMethod meghívásához szükséges egy paraméter, amit a kiszolgáló nem kapott meg (hibás paraméterezés vagy a paraméter nem konvertálható megfelelő típusra)</li>
<li>500: a WebMethod végrehajtása közben hiba történt</li>
</ul>
<p>A fent nevezett hibakódokat a rendszer a böngészők és más kliensek irányába továbbítják. A SyX beépülő gazdája a Log műveletek segítségével naplózhatja a hibás működést. Emellett, amennyiben erre szükség van a HTTP hibakódok mellett például bool visszatérési értékkel a hívó félnek jelezheti egy metódus a művelet sikeres végrehajtását.</p>
<p><strong>  </strong></p>
<p><strong>Teljesítmény</strong></p>
<p>A teljesítmény elsődleges szempont az SaaS szolgáltatások tervezésekor. A beérkező kérések azonnal párhuzamos működésre váltanak, a kérések előfeldolgozása, paraméterek ellenőrzése már párhuzamosan kerül végrehajtásra. Ezáltal a folyamatban lévő, beérkező kérések sem lassítják vagy állítják meg a rendszert. A kérések valós kiszolgálása (WebMethod hívása) szükég esetén a főablak szálon kerül végrehajtásra. Ennek bizonyos teljesítménybeli hátrányai lehetnek a lassú WebMethod műveletek esetén.</p>
<p>Performancia szempontból a SaaS SyX beépülők kiváló teljesítmény mutatókkal jellemezhetőek:</p>
<p style="text-align: right;"><em>localhost-on mérve, apache ab.exe alkalmazással, 1000 kérés, folyamatosan</em></p>
<ul>
<li>Üres metódus meghívása: <strong>260 művelet/mp</strong></li>
<li>Konstans string metódus hívása: <strong>246 művelet/mp</strong></li>
<li>Képgenerálás: <strong>137 művelet/mp</strong></li>
<li>404-es hibával visszatérő kérések: <strong>270 művelet/mp</strong></li>
<li>Vevő keresése ID-ja alapján: <strong>40 művelet/mp</strong></li>
</ul>
<p><a href="http://syx.symboltech.hu/wp-content/uploads/2011/05/speedtest.png"><img class="alignnone size-medium wp-image-339" title="speedtest" src="http://syx.symboltech.hu/wp-content/uploads/2011/05/speedtest-280x300.png" alt="" width="280" height="300" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://syx.symboltech.hu/fejlesztesi-kisokos/saas-intranet/4-hibakezeles-es-teljesitmeny/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>3. HTML eredmény és Intranet</title>
		<link>http://syx.symboltech.hu/fejlesztesi-kisokos/saas-intranet/3-html-eredmeny-es-intranet/</link>
		<comments>http://syx.symboltech.hu/fejlesztesi-kisokos/saas-intranet/3-html-eredmeny-es-intranet/#comments</comments>
		<pubDate>Sun, 15 May 2011 20:55:48 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[SaaS és Intranet]]></category>
		<category><![CDATA[404]]></category>
		<category><![CDATA[dokumentum letöltés]]></category>
		<category><![CDATA[errorpage]]></category>
		<category><![CDATA[favicon]]></category>
		<category><![CDATA[favicon.ico]]></category>
		<category><![CDATA[HtmlResponse]]></category>
		<category><![CDATA[image/x-icon]]></category>
		<category><![CDATA[intranet]]></category>
		<category><![CDATA[kép generálás]]></category>
		<category><![CDATA[portál]]></category>
		<category><![CDATA[saas]]></category>

		<guid isPermaLink="false">http://syx.symboltech.hu/?p=314</guid>
		<description><![CDATA[A WebMethod attribútummal ellátott metódusok meghívhatóvá válnak a kiválasztott TCP porton, HTTP kommunikációt használva. Kézenfekvő az igény, hogy a SaaS szolgáltatások ne csak primitív és összetett adatokat hanem HTML tartalmat is ki tudjanak szolgálni. Az URL alapú szolgáltatás kezelés lehetővé teszi, hogy böngészőben használjuk a WebMethod-okat, ha azok HTML tartalmat is elő tudnának állítani. A [...]]]></description>
			<content:encoded><![CDATA[<p>A WebMethod attribútummal ellátott metódusok meghívhatóvá válnak a kiválasztott TCP porton, HTTP kommunikációt használva. Kézenfekvő az igény, hogy a SaaS szolgáltatások ne csak primitív és összetett adatokat hanem HTML tartalmat is ki tudjanak szolgálni.</p>
<p>Az URL alapú szolgáltatás kezelés lehetővé teszi, hogy böngészőben használjuk a WebMethod-okat, ha azok HTML tartalmat is elő tudnának állítani. A WebMethod, amely string típusú adatot ad vissza, alapértelmezetten TEXT/PLAIN mime típussal kerül visszaküldésre. Ennek megoldására vezettük be a HtmlResponse osztályt. Az osztály segítségével tetszőleges mime típus visszadható és az alapértelmezett string adatok küldése helyett lehetőség van byte[] eredmény visszaadására is. Ez használható képek vagy letölthető tartalom kiszolgálására. Pl.: <a href="http://localhost:8800/?pluginicon=true">http://localhost:8800/?pluginicon=true</a> (amennyiben a plugin-nek van ikonja)</p>
<p>Egy teljes Intranet portál megvalósíthatóvá válik a HtmlResponse eredmény típus használatával. Nézzük erre néhány példát:</p>
<p><strong>HTML tartalom létrehozása</strong></p>
<p>A HTML tartlom létrehozása a programozó vagy a designer feladata. A HTML stípusok, DIV-ek, TABLE-k kezeléséhez a SyX SDK nem nyújt támogatást. A létrehozott HTML tartalom megfelelő megjelenítéséhez használható a HtmlResponse osztály.</p>
<p>Nézzük az alábbi példát, ahol egy StringBuilderben összeállított HTML tartalmat szolgálunk ki a böngésző felé. (SaaS módban valószínüleg a hívó fél nem tud mit kezdeni a HTML formázott szöveggel)</p>
<p>        [WebMethod("Példa web metódus V.")]<br />
        public <strong>HtmlResponse </strong>SampleWebMethodHTML()<br />
        {<br />
            StringBuilder sb = new StringBuilder();<br />
            sb.AppendLine(&#8220;&lt;html&gt;&#8221;);<br />
            sb.AppendLine(&#8220;&lt;body&gt;&#8221;);<br />
            sb.AppendLine(&#8220;&lt;center&gt;Példa szöveg&#8221;);<br />
            sb.AppendLine(&#8220;&lt;img src=&#8217;http://www.symboltech.hu/images/slide_easy.jpg&#8217;&gt;&lt;/center&gt;&#8221;);<br />
            sb.AppendLine(&#8220;&lt;/body&gt;&#8221;);<br />
            sb.AppendLine(&#8220;&lt;/html&gt;&#8221;);<br />
            return new <strong>HtmlResponse</strong>(sb.ToString());<br />
        }</p>
<p>A HtmlResponse alapértelmezetten Text/HTML MIME típusú adatot ad vissza UTF8 kódolással, az átadott HTML formátumú szövegen túl, semmilyen paraméter nem szükséges.</p>
<p><strong>  </strong></p>
<p><strong>Képek, dokumentumok kiszolgálása</strong></p>
<p>Képek vagy dokumentumok kiszolgálhatóak a HtmlResponse osztály konstruktorának byte[]-bel való meghívásával. Az eredmény típusának megadása fontos, mert a böngésző a MIME típus alapján fogja kiválasztani a megjelenítés vagy letöltés módját.</p>
<p>Készítsünk egy képet futási időben, írjunk rá egy szöveget és adjuk vissza a böngészőnek JPEG formátumban:</p>
<p>        [WebMethod("Kép létrehozása")]<br />
        public <strong>HtmlResponse </strong>SampleWebMethodImage()<br />
        {<br />
            using (Bitmap bmp = new <strong>Bitmap(320, 160)</strong>)<br />
            using (Graphics g = Graphics.FromImage(bmp))<br />
            using (MemoryStream stream = new MemoryStream())<br />
            {<br />
                g.Clear(Color.Gray);<br />
                g.DrawString(<strong>&#8220;Példa kép&#8221;</strong>, new Font(&#8220;Arial&#8221;, 28), new SolidBrush(Color.Orange), 20, 20);</p>
<p>                bmp.Save(stream, ImageFormat.Jpeg);<br />
                stream.Position = 0;<br />
                return new <strong>HtmlResponse</strong>(stream.ToArray(), null, <strong>System.Net.Mime.MediaTypeNames.Image.Jpeg</strong>);<br />
            }<br />
        }</p>
<p>Állítsunk elő egy letölthető dokumentumot (lehetne az adatbázis csatolt dokumentumai közül is kiválasztani egyet):</p>
<p>        [WebMethod("Dokumentum letöltése")]<br />
        public <strong>HtmlResponse </strong>SampleWebMethodDocument()<br />
        {<br />
            StringBuilder sb = new StringBuilder();<br />
            sb.AppendLine(&#8220;Első sor&#8221;);<br />
            sb.AppendLine(&#8220;Második sor&#8221;);<br />
            sb.AppendLine(&#8220;3. sor&#8221;);</p>
<p>            return new <strong>HtmlResponse</strong>(sb.ToString(), <strong>&#8220;sample.txt&#8221;</strong>, <strong>MediaTypeNames.Application.Octet</strong>);<br />
        }</p>
<p>Vegyük észre, hogy az előző példában szereplő kép létrehozás is letöltésre kínálja fel a képet, ha a NULL érték helyett megadunk egy fájlnevet!</p>
<p><strong>  </strong></p>
<p><strong>Átirányítás kezelése</strong></p>
<p>Intranet portálok esetén előfrodulhat, hogy a HTML tartlom helyett valamely más (belső) oldalra kell átirányítani a böngészőt. Ezt szintén a HtmlResponse eredmény használatával érhetjük el:</p>
<p>        [WebMethod("Példa web metódus REDIRECT")]<br />
        public <strong>HtmlResponse </strong>SampleWebMethodRedirect()<br />
        {<br />
            return HtmlResponse.<strong>Redirect</strong>(&#8220;/SampleWebMethodHTML&#8221;);<br />
        }</p>
<p><strong> </strong></p>
<p><strong>Alapértelmezett főoldal beállítása</strong></p>
<p>Nyilvánvaló az igény, hogy ha Intranet portált üzemeltetünk, akkor egy főoldalon ne az elérhető szolgáltatások listája jelenjen meg, hanem a fő szolgáltatás. Ezt megadhatjuk a SyX WebStartPage attribútumával. Ennek paramétere a főoldal lekérésekor (<a href="http://localhost:8800">http://localhost:8800</a>) megjelenő szolgáltatás, amelynek tipikusan metódus nélkülinek és HtmlResponse visszatérésű értékünek kell lennie.</p>
<p><strong>[WebStartPage("SampleWebMethod2a")]</strong></p>
<p><strong> </strong></p>
<p><strong>404-es hibaoldal beállítása</strong></p>
<p>A nem elérhető, rosszul címzett oldalak helyett lehetőség van (az alapértelmezett főoldalhoz hasonlóan) egy hibaoldalt megadni. A hibaoldal lehet egy erre a célra létrehozott oldal vagy egy létező, működést megvalósító oldal, például a főoldal. A 404-es hibaoldal minden esetben átirányítással valósul meg. Az erőforrások, képek hibás URL-jei nem kerülnek átirányításra, ilyen esetben HTTP 404-es hibát kapunk (kép helyett piros X jelenik meg a böngészőben).</p>
<p><strong>[Web404Page("SampleWebMethod4")]</strong></p>
<p><strong> </strong></p>
<p><strong>A favicon.ico kezelése</strong></p>
<p>A rendszer automatikusan kezeli a favicon.ico <strong>image/x-icon </strong>típsuként való kiszolgálását. A SyX beépülő iconja alapján hoz létre egy ICO formátumú képet, amelyet a kérés beérkezésekor kiszolgál.</p>
]]></content:encoded>
			<wfw:commentRss>http://syx.symboltech.hu/fejlesztesi-kisokos/saas-intranet/3-html-eredmeny-es-intranet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>2. SaaS metódusok definiálása</title>
		<link>http://syx.symboltech.hu/fejlesztesi-kisokos/saas-intranet/2-saas-metodusok-definialasa/</link>
		<comments>http://syx.symboltech.hu/fejlesztesi-kisokos/saas-intranet/2-saas-metodusok-definialasa/#comments</comments>
		<pubDate>Sun, 15 May 2011 20:55:27 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[SaaS és Intranet]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[application/json]]></category>
		<category><![CDATA[dictionary]]></category>
		<category><![CDATA[get]]></category>
		<category><![CDATA[json]]></category>
		<category><![CDATA[nullable]]></category>
		<category><![CDATA[összetett típus]]></category>
		<category><![CDATA[post]]></category>
		<category><![CDATA[primitív típus]]></category>
		<category><![CDATA[void]]></category>
		<category><![CDATA[webmethod]]></category>

		<guid isPermaLink="false">http://syx.symboltech.hu/?p=312</guid>
		<description><![CDATA[Kiszolgálói metódusok létrehozásához készítsünk egy tetszőleges metódust, amelyet lássunk el a WebMethod attribútummal. A WebMethod opcionális paramétere egy szolgáltatásleíró szöveg, amely a főoldalon jelenik meg a metódus linkje alatt. A metódusnak lehet nulla, egy vagy több paramétere és visszatérési értéke is lehet void, valamilyen primitív típus vagy tetszőleges (akár saját) osztály is.   Metódusok létrehozása [...]]]></description>
			<content:encoded><![CDATA[<p>Kiszolgálói metódusok létrehozásához készítsünk egy tetszőleges metódust, amelyet lássunk el a WebMethod attribútummal. A WebMethod opcionális paramétere egy szolgáltatásleíró szöveg, amely a főoldalon jelenik meg a metódus linkje alatt.</p>
<p>A metódusnak lehet nulla, egy vagy több paramétere és visszatérési értéke is lehet void, valamilyen primitív típus vagy tetszőleges (akár saját) osztály is.</p>
<p><strong>  </strong></p>
<p><strong>Metódusok létrehozása</strong></p>
<p>Az alábbi példa egy olyan metódust hoz létre, amely eredményül egy szöveget ad vissza. Ez a böngészőben meg is jelenik (akár a főképernyőn a linkra kattintva is). A metódus meghívásra kerül, ha a böngészőben az alábbi linkre kattintunk: <a href="http://localhost:8800/SampleWebMethod2a">http://localhost:8800/SampleWebMethod2a</a></p>
<p>        [<strong>WebMethod</strong>("Példa web metódus II/a.")]<br />
        public string SampleWebMethod2a()<br />
        {<br />
            return String.Format(&#8220;A_{0}_X&#8221;, &#8220;StartPage&#8221;);<br />
        }</p>
<p>A következő metódus paramétert is vár, amelyet felhasznál az eredmény létrehozakor. Meghívásakor át kell adnunk egy paramétert: <a href="http://localhost:8800/SampleWebMethod2?s=pelda">http://localhost:8800/SampleWebMethod2?s=pelda</a></p>
<p>        [WebMethod("Példa web metódus II.")]<br />
        public string SampleWebMethod2(<strong>string s</strong>)<br />
        {<br />
            return String.Format(&#8220;A_{0}_X&#8221;, <strong>s</strong>);<br />
        }</p>
<p><strong>  </strong></p>
<p><strong>Paraméterek átadása</strong></p>
<p>A paraméterek átadhatóak a meghívott URL-ben is ?-lel és &amp; jellel elválasztva, illetve nagyobb mennyiségű adat esetén (URL max. 512 karakter) POST adatok között is. Mindkét meghívási mód UTF8 kódolású karaktereket vár és ad vissza. A GET és POST módszer kiváló lehetőséget biztosít arra, hogy az URL-ek meghívása, a szolgáltatások használata ne csak böngészőből legyen elérhető, hanem tetszőleges programozási nyelven írt alkalmazásból, amely képes HTTP kommunikációra.</p>
<p><strong>Gyakran változó paraméterek</strong></p>
<p>Amennyiben a metódushívás egy böngésző űrlapjáról jön, nehéz előre megadni minden változót, a típusosság ilyen esetben hátrány lehet. A gyakrban változó paraméterekre két megoldás létezik. A <strong>nullozható </strong>(int?, string, class) típusok használata esetén a paramétert <strong>nem kell átadni</strong>, lehetőség van arra, hogy azt elhagyjuk a metódus hívásakor. A metódus törzsében ilyenkor a .HasValue használata erősen javasolt.</p>
<p>        [WebMethod("Példa web metódus Nullable")]<br />
        public string SampleWebMethodNull(<strong>int a, DateTime? b, decimal? c</strong>)<br />
        {<br />
            return String.Format(&#8220;{0} &#8211; {1} &#8211; {2}&#8221;, <strong>a, b, c</strong>);<br />
        }</p>
<p><a href="http://localhost:8800/SampleWebMethodNull?a=17">http://localhost:8800/SampleWebMethodNull?a=17</a></p>
<p>A másik &#8211; <em>teljes szabadságot adó </em>- megoldás, amikor a webmethod egyetlen paraméterének típusa <strong>Dictionary&lt;string, string&gt;</strong>. Ilyenkor a kapott összes paramétert egy dictionary típuson keresztül lehet feldolgozni. Ez lehetővé teszi, hogy paraméterek létezésére vizsgáljunk. Ugyanezen módszer jelent megoldást arra is, ha olyan sok paraméterrel (&gt;15) dolgozunk, amely egy erősen típusos webmethod paraméterlistáját kezelhetetlenné tenné.</p>
<p>        [WebMethod("Példa web metódus - Dynamic")]<br />
        public string SampleWebMethodDynamic(<strong>Dictionary&lt;String, String&gt;</strong> parameters)<br />
        {<br />
            List&lt;string&gt; result = new List&lt;string&gt;();<br />
            foreach (<strong>KeyValuePair&lt;string, string&gt; kv</strong> in parameters)<br />
                result.Add(String.Format(&#8220;{0}: {1}&#8221;, kv.Key, kv.Value));<br />
            return String.Join(&#8220;\n&#8221;, result.ToArray());<br />
        }<br />
<strong>Eredmény típusa</strong></p>
<p>A metódusok visszatérési értéke is tetszőleges típus lehet. Ezt a rendszer string-gé konvertálja majd így adja vissza (vagy jeleníti meg a böngészőben).</p>
<p><strong>Összetett típusok használata</strong></p>
<p>A primitív típusok mellett tetszőleges osztályok paraméterként való átadására és eredményként való kinyerésére is lehetőség van. Az osztályok adatai XML sorosítás után kerülnek átadásra. Ez lehetővé teszi, hogy szövegként átadhatóak legyenek és tetszőleges mélységű, hirerchikus adat közvetítésére is lehetőség van. A kapcsolófelület megváltozásakor (pl.: osztály bővítése) az XML sorosítás következtében a két illeszkedő felületet nem kell egyidőben cserélni. A fogadó fél a kiszolgáló válaszában található hozzáadott adatokat figyelmen kívül hagyhatja.</p>
<p>Például az alábbi osztály a SyX-en belül definiáljuk, majd felhasználjuk egy SaaS szolgáltatás visszatérési értékeként:</p>
<p>        public class <strong>WebMethodResult</strong><br />
        {<br />
            private int a = 1979;</p>
<p>            public int A { get { return a; } set { a = value; } }<br />
        }</p>
<p>        [WebMethod("Példa web metódus III.")]<br />
        public <strong>WebMethodResult </strong>SampleWebMethod3()<br />
        {<br />
            return new WebMethodResult();<br />
        }</p>
<p><strong>Felhívjuk a figyelmet, hogy összetett adattípusok használatakor kerüljük a rendszer belső, bonyolult adattípusait, amelyek sorosítása nagyon nagy adatmennyiséget generál. Például a Symbol Ügyvitel entitásainak vagy a .NET DataTable osztályának sorosítása több MB felesleges adatot jelenít meg az XML-ben.</strong></p>
<p><strong>  </strong></p>
<p><strong>Ajax és JSON</strong></p>
<p>Amennyiben az eredmény osztály típusú, úgy lehetőség van az XML formátum helyett JSON formátumot választani. A webmethod esetén alkalmazni kell a <strong>JsonResult</strong> attribútumot. Ilyenkor a metódus visszatérési osztálya nem XML sorosítással fog a kimenetre kerülni, hanem JSON formátumban. Emellett pedig az eredmény MIME típusa <strong>Application/Json</strong> lesz. Ez a megoldás használható Ajax környezetben is összetett típusok visszaadására.</p>
<p><strong>  </strong></p>
<p><strong>Metódusnév és URL kapcsolata</strong></p>
<p>A meghívott URL végződése alapján, betűnagyság <strong>érzékenyen </strong>kerül kiválasztásra a megfelelő metódus. A paraméterek <strong>nem</strong> sorrend és <strong>betűnagyság </strong>érzékenyek. A metódus nevének kiválasztásakor a pontokat _ jelre cseréli a rendszer, ezáltal a fájl hivatkozások (<strong>tables.js, leftcorner.jpg</strong>) is metódusokra fordíthatóak (<strong>tables_js(), leftcorner_jpg()</strong>). Statikus fájlok esetén javasolt a <strong>WebStaticResource </strong>attribútum használata!<span style="color: #2b91af; font-size: x-small;"></span>Jelenleg a rendszer nem kezeli a túlterhelt metódusokat (egy név, több féle paraméterezés).</p>
]]></content:encoded>
			<wfw:commentRss>http://syx.symboltech.hu/fejlesztesi-kisokos/saas-intranet/2-saas-metodusok-definialasa/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>1. SaaS = Software as a Service</title>
		<link>http://syx.symboltech.hu/fejlesztesi-kisokos/saas-intranet/1-saas-software-as-a-service/</link>
		<comments>http://syx.symboltech.hu/fejlesztesi-kisokos/saas-intranet/1-saas-software-as-a-service/#comments</comments>
		<pubDate>Sun, 15 May 2011 20:49:36 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[SaaS és Intranet]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[saas]]></category>
		<category><![CDATA[software as a service]]></category>
		<category><![CDATA[SyX]]></category>
		<category><![CDATA[webport]]></category>

		<guid isPermaLink="false">http://syx.symboltech.hu/?p=307</guid>
		<description><![CDATA[A SyX beépülő modulok a v1.74-es verziótól alkalmasak külső kérések kiszolgálására is, azaz SaaS providerként is működnek.   Eddig a SyX beépülők funkciója az volt, hogy a meglévő funkciókat egészítsék ki, új menüpontokat vagy vezérlőket hozzanak létre, illetve beépített időzítőkkel rendszeresen műveleteket végezzenek. Ezek a műveletek használhattak Internetes kommunikációt, de a műveletet a Symbol Ügyvitel [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;">A SyX beépülő modulok a v1.74-es verziótól alkalmasak külső kérések kiszolgálására is, azaz <strong>SaaS provider</strong>ként is működnek.</p>
<p style="text-align: center;"> </p>
<p>Eddig a SyX beépülők funkciója az volt, hogy a meglévő funkciókat egészítsék ki, új menüpontokat vagy vezérlőket hozzanak létre, illetve beépített időzítőkkel rendszeresen műveleteket végezzenek. Ezek a műveletek használhattak Internetes kommunikációt, de a műveletet a Symbol Ügyvitel kezdeményezte. Eddig.</p>
<p>SaaS kiszolgálóként a SyX-ek egy megadott TCP porton keresztül HTTP kommunikációt folytatnak, kéréseket fogadnak és kiszolgálják azokat. A kiszolgálás járhat szöveges/XML eredménnyel, amelyet a metódusok vissza tudnak küldeni. Az SaaS szolgáltatást típusos metódusokkal tudjuk feldolgozni, minden adat a C# nyelv szintaktikája alapján jelenik meg a SyX-ben. Mindezt egyéb webkiszolgáló (IIS, Apache) nélkül.</p>
<p><strong>  </strong></p>
<p><strong>Mi szükéges hozzá, hogy SaaS szolgáltatásokat tudjunk létrehozni?</strong></p>
<p>A SyX beépülőben meg kell adni az alábbi attribútumot, amelyben beállíthatjuk, hogy melyik porton fogadjuk a kéréseket:</p>
<p><strong>[WebPort(8800)]</strong></p>
<p>Ezután a SyX (akár a fejlesztői konzolból indítva) a 8800-as porton hallgatózik és a böngészőbe beírva az alábbi linket, működőképes választ kell kapnunk: <a href="http://localhost:8800/">http://localhost:8800/</a></p>
<p>A böngészőben megjelenik a SyX neve, ikonja és a SyX kiszolgálható metudósok listája, mint az alábbi képen:</p>
<p><a href="http://syx.symboltech.hu/wp-content/uploads/2011/05/mainscreen.png"><img class="alignnone size-medium wp-image-308" title="mainscreen" src="http://syx.symboltech.hu/wp-content/uploads/2011/05/mainscreen-300x296.png" alt="" width="300" height="296" /></a></p>
<p>A linkekre kattintva azonnal meg is tudjuk hívni a metódusokat, azok eredménye a böngészőben fog megjelenni.</p>
<p>Az SaaS működés elve, hogy a megfelelően paraméterezhető metódusokat HTTP kérésék (POST vagy GET) segítségével meghívjuk, majd amennyiben azok valamilyen eredménnyel érnek véget, arról értesítést kaphatunk. A végrehajtott műveletek lehetnek:</p>
<ul>
<li><strong>Lekérdezések</strong>: A paraméterül átadott adatok alapján egy lekérdezést állítunk össze, amely akár nagy méretű adathalmazt is visszaadhat eredményül.</li>
<li><strong>Műveletek</strong>: A paraméterül adott adatok alapján valamilyen műveletet végzünk, amelynek bizonyos esetekben eredménye is lehet. Ilyenkor egy nem VOID metódust kell létrehozni.</li>
</ul>
<p><strong>Fontos ismételten hagnsúlyozni, hogy az SaaS működéshez nincs szükség semmilyen egyén webkiszolgálóra (IIS, Apache).</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://syx.symboltech.hu/fejlesztesi-kisokos/saas-intranet/1-saas-software-as-a-service/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Műveleti gombok egyedi listákon</title>
		<link>http://syx.symboltech.hu/fejlesztesi-kisokos/felhasznaloi-felulet/muveleti-gombok-egyedi-listakon/</link>
		<comments>http://syx.symboltech.hu/fejlesztesi-kisokos/felhasznaloi-felulet/muveleti-gombok-egyedi-listakon/#comments</comments>
		<pubDate>Mon, 09 May 2011 11:58:52 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Felhasználói felület]]></category>
		<category><![CDATA[command]]></category>
		<category><![CDATA[egyedi lista]]></category>
		<category><![CDATA[művelet]]></category>

		<guid isPermaLink="false">http://syx.symboltech.hu/?p=304</guid>
		<description><![CDATA[Egyedi listák létrehozásakor (http://syx.symboltech.hu/fejlesztesi-kisokos/felhasznaloi-felulet/uj-lista-letrehozasa/) egyedi műveleti gombokra is szükség lehet. Ezeket tudjuk megvalósítani az lábbi módon.         [MenuCustomListCommand("Egyedi command", "SampleCustomList")]         public void SampleCustomListEx(DataRow row)         {             MessageBox.Show(row[0].ToString());         } Hozzunk létre egy új metódust, amelynek egy paramétere van, amely egy DataRow (ebben fogjuk megkapni az éppen kiválasztott sort). A MenuCustomListCommand attribútum segítségével megadhatjuk, [...]]]></description>
			<content:encoded><![CDATA[<p>Egyedi listák létrehozásakor (<a href="http://syx.symboltech.hu/fejlesztesi-kisokos/felhasznaloi-felulet/uj-lista-letrehozasa/">http://syx.symboltech.hu/fejlesztesi-kisokos/felhasznaloi-felulet/uj-lista-letrehozasa/</a>) egyedi műveleti gombokra is szükség lehet. Ezeket tudjuk megvalósítani az lábbi módon.</p>
<p>        [MenuCustomListCommand("Egyedi command", "SampleCustomList")]<br />
        public void SampleCustomListEx(DataRow row)<br />
        {<br />
            MessageBox.Show(row[0].ToString());<br />
        }</p>
<p>Hozzunk létre egy új metódust, amelynek egy paramétere van, amely egy DataRow (ebben fogjuk megkapni az éppen kiválasztott sort). A MenuCustomListCommand attribútum segítségével megadhatjuk, hogy mi legyen az új funkció neve és mely egyedi listán jelenjen meg.</p>
<p>Az egyedi listán egynél több művelet is elhelyezhető. A műveletek a deklarálásuk sorrendjében fognak megjelenni. Az első művelet lesz a kiemelt, amely lista ENTER vagy duplaklikk eseményére aktiválódik.</p>
<p>A műveletekhez a megszokott módon ikon (32&#215;32) is rendelhető.</p>
<p>Az új művelet maga bármilyen C# kódrészlet lehet. Amennyiben itt egy újabb ablakot szeretnénk megjeleníteni (pl.: összesítő lista kibontása), úgy használhatjuk a this.DisplayCustomList(&#8220;Egyedi ablak&#8221;, image, datatable) metódust. Ez új ablakot jelenít meg az átadott elnevezéssel, ikonnal és adattartalommal.</p>
]]></content:encoded>
			<wfw:commentRss>http://syx.symboltech.hu/fejlesztesi-kisokos/felhasznaloi-felulet/muveleti-gombok-egyedi-listakon/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SyX felhasználás korlátozása cégnév alapján</title>
		<link>http://syx.symboltech.hu/fejlesztesi-kisokos/keretrendszer/syx-felhasznalas-korlatozasa-cegnev-alapjan/</link>
		<comments>http://syx.symboltech.hu/fejlesztesi-kisokos/keretrendszer/syx-felhasznalas-korlatozasa-cegnev-alapjan/#comments</comments>
		<pubDate>Sun, 20 Mar 2011 21:09:20 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Keretrendszer]]></category>
		<category><![CDATA[cégnév]]></category>
		<category><![CDATA[korlátozás]]></category>

		<guid isPermaLink="false">http://syx.symboltech.hu/?p=276</guid>
		<description><![CDATA[Szükség lehet rá, hogy a SyX beépülő futtatását cégnévhez kössük. Ha a CompanyNamePermission attribútumot használjuk, akkor az ott megadott cégnév vagy cégnevek esetén fog csak a SyX beépülő települni. Ezáltal korlátozhatjuk, hogy az értékesített SyX mely cégeknél (cégcsoportok esetén milyen kapcsolódó cégeknél) tud futni. Egy vagy több cégnév megadására is van lehetőség: [CompanyNamePermission("Alma Kft.", "")] [CompanyNamePermission("Symbol [...]]]></description>
			<content:encoded><![CDATA[<p>Szükség lehet rá, hogy a SyX beépülő futtatását cégnévhez kössük. Ha a <strong>CompanyNamePermission </strong>attribútumot használjuk, akkor az ott megadott cégnév vagy cégnevek esetén fog csak a SyX beépülő települni. Ezáltal korlátozhatjuk, hogy az értékesített SyX mely cégeknél (cégcsoportok esetén milyen kapcsolódó cégeknél) tud futni.</p>
<p>Egy vagy több cégnév megadására is van lehetőség:</p>
<p style="text-align: center;"><strong>[CompanyNamePermission("Alma Kft.", "")]</strong></p>
<p style="text-align: center;"><strong>[CompanyNamePermission("Symbol LAB", "Symbol Tech Kft.")]</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://syx.symboltech.hu/fejlesztesi-kisokos/keretrendszer/syx-felhasznalas-korlatozasa-cegnev-alapjan/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Szükséges programverzió</title>
		<link>http://syx.symboltech.hu/fejlesztesi-kisokos/keretrendszer/szukseges-programverzio/</link>
		<comments>http://syx.symboltech.hu/fejlesztesi-kisokos/keretrendszer/szukseges-programverzio/#comments</comments>
		<pubDate>Sun, 20 Mar 2011 21:02:45 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Keretrendszer]]></category>
		<category><![CDATA[minimális verzió]]></category>
		<category><![CDATA[verzió]]></category>
		<category><![CDATA[verziószám]]></category>

		<guid isPermaLink="false">http://syx.symboltech.hu/?p=272</guid>
		<description><![CDATA[A Symbol Ügyvitel folyamatos fejlesztése miatt szükség lehet arra, hogy a SyX beépülő készítője beállítsa, hogy milyen verziója Symbol Ügyvitel szükséges a futtatáshoz. A SyX Visual Studio-ban lefordítható például a v1.70-es SDK-val, de nem fog futni olyan Symbol Ügyvitellel, amely csak 1.64-es verziószámú. Például, a Symbol Ügyvitel v1.66-es verziójától elérhető a Szerződéses árak telephelyhez való [...]]]></description>
			<content:encoded><![CDATA[<p>A Symbol Ügyvitel folyamatos fejlesztése miatt szükség lehet arra, hogy a SyX beépülő készítője beállítsa, hogy milyen verziója Symbol Ügyvitel szükséges a futtatáshoz. A SyX Visual Studio-ban lefordítható például a v1.70-es SDK-val, de nem fog futni olyan Symbol Ügyvitellel, amely csak 1.64-es verziószámú.</p>
<p>Például, a Symbol Ügyvitel v1.66-es verziójától elérhető a Szerződéses árak telephelyhez való rendelése. Amennyiben a SyX beépülő ezt használja, meg kell adni a</p>
<p style="text-align: center;"><strong>[RequiredVersion(1, 66)]</strong></p>
<p>attribútumot, hogy csak azok a felhasználók érhessék el, akik frissítettek v1.66-ra.</p>
]]></content:encoded>
			<wfw:commentRss>http://syx.symboltech.hu/fejlesztesi-kisokos/keretrendszer/szukseges-programverzio/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Új számla létrehozása és megjelenítése</title>
		<link>http://syx.symboltech.hu/fejlesztesi-kisokos/peldak/uj-szamla-letrehozasa-es-megjelenitese/</link>
		<comments>http://syx.symboltech.hu/fejlesztesi-kisokos/peldak/uj-szamla-letrehozasa-es-megjelenitese/#comments</comments>
		<pubDate>Sun, 20 Mar 2011 19:50:39 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Példák]]></category>

		<guid isPermaLink="false">http://syx.symboltech.hu/?p=269</guid>
		<description><![CDATA[Az alábbi kódrészlet egy új számlát hoz létre az egyetlen vagy kiválasztott számlatömbben. Vevőnek beállítja a vevők közül az elsőt, majd a számlát megjeleníti.                 using (EntityHandler handler = CreateEntityHandler(false))                 {                     long? seq = SelectVoucherSequence(SymbolVoucherType.Invoice);                     if (!seq.HasValue)                         return;                     StockOut inv = handler.StockOutAdapter.CreateNewObject();                     inv.VoucherSequence = seq.Value;                     inv.VoucherType = SymbolStockOutVoucherType.Invoice; [...]]]></description>
			<content:encoded><![CDATA[<p>Az alábbi kódrészlet egy új számlát hoz létre az egyetlen vagy kiválasztott számlatömbben. Vevőnek beállítja a vevők közül az elsőt, majd a számlát megjeleníti.</p>
<p>                using (EntityHandler handler = CreateEntityHandler(false))<br />
                {<br />
                    long? seq = SelectVoucherSequence(SymbolVoucherType.Invoice);<br />
                    if (!seq.HasValue)<br />
                        return;<br />
                    StockOut inv = handler.StockOutAdapter.CreateNewObject();<br />
                    inv.VoucherSequence = seq.Value;<br />
                    inv.VoucherType = SymbolStockOutVoucherType.Invoice;<br />
                    inv.CustomerObj = handler.CustomerAdapter.SelectAll(true)[0];<br />
                    inv.Display();<br />
                }</p>
<p>Fontos megjegyezni, hogy:</p>
<ul>
<li>A kódrészlet ugyan a using-ból való kilépés miatt felszabadítaná (elengedné) az objektumot, de a számlát megjelenítő ablakból hivatkozva a StockOut objektumra, az a memóriában marad.</li>
<li>EntityHandler létrehozásakor fontos, hogy false paraméterrel hívjuk meg, mert a using elhagyásakor még nem kell (nem is tudnánk) elmenteni a StockOut objektumot.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://syx.symboltech.hu/fejlesztesi-kisokos/peldak/uj-szamla-letrehozasa-es-megjelenitese/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Új vevők és telephelyek létrehozása</title>
		<link>http://syx.symboltech.hu/fejlesztesi-kisokos/peldak/uj-vevok-es-telephelyek-letrehozasa/</link>
		<comments>http://syx.symboltech.hu/fejlesztesi-kisokos/peldak/uj-vevok-es-telephelyek-letrehozasa/#comments</comments>
		<pubDate>Sun, 20 Mar 2011 19:47:13 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Példák]]></category>

		<guid isPermaLink="false">http://syx.symboltech.hu/?p=267</guid>
		<description><![CDATA[Az alábbi kódrészlet 5 vevőt hoz létre, mindegyikhez 3-3 telephelyet hozzákapcsolva. A művelet ideje alatt egy folyamatjelző csíkot jelenít meg.                 using (ProgressForm prog = CreateProgressForm(&#8220;Vevők létrehozása&#8221;))                 using (EntityHandler handler = CreateEntityHandler())                 {                     CustomerCollection cc = handler.CustomerAdapter.CreateEmptyCollection();                     for (int i = 0; i &#60; 5; i++)                     {                         prog.UpdateStatus(String.Format(&#8220;{0}. vevő&#8221;, [...]]]></description>
			<content:encoded><![CDATA[<p>Az alábbi kódrészlet 5 vevőt hoz létre, mindegyikhez 3-3 telephelyet hozzákapcsolva. A művelet ideje alatt egy folyamatjelző csíkot jelenít meg.</p>
<p>                using (ProgressForm prog = CreateProgressForm(&#8220;Vevők létrehozása&#8221;))<br />
                using (EntityHandler handler = CreateEntityHandler())<br />
                {<br />
                    CustomerCollection cc = handler.CustomerAdapter.CreateEmptyCollection();<br />
                    for (int i = 0; i &lt; 5; i++)<br />
                    {<br />
                        prog.UpdateStatus(String.Format(&#8220;{0}. vevő&#8221;, i));</p>
<p>                        Customer cust = cc.AddNew();<br />
                        cust.CustomerStatus = true;<br />
                        cust.Code = new Random().Next(1000000).ToString() + i.ToString();<br />
                        cust.Name = String.Format(&#8220;Symbol {0} Tech Kft.&#8221;, i);<br />
                        cust.InvoiceZip = &#8220;1135&#8243;;<br />
                        cust.InvoiceCity = &#8220;Budapest&#8221;;<br />
                        cust.InvoiceStreet = &#8220;Lehel út 61.&#8221;;<br />
                        cust.PaymentMethodObj = handler.PaymentMethodAdapter.SelectAll(true)[0];<br />
                        Log(LogType.Info, String.Format(&#8220;Fiz.mód: {0}&#8221;, cust.PaymentMethodObj.Name));<br />
                        for (int j = 0; j &lt; 3; j++)<br />
                        {<br />
                            CustomerAddress addr = cust.ChildCustomerAddressByCustomer.AddNew();<br />
                            addr.Name = String.Format(&#8220;Telephely: {0}&#8221;, j);<br />
                        }<br />
                    }<br />
                    Log(LogType.Info, String.Format(&#8220;{0}db vevő létrehozva&#8221;, 5));<br />
                }</p>
]]></content:encoded>
			<wfw:commentRss>http://syx.symboltech.hu/fejlesztesi-kisokos/peldak/uj-vevok-es-telephelyek-letrehozasa/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Modulfüggő menüpontok</title>
		<link>http://syx.symboltech.hu/fejlesztesi-kisokos/keretrendszer/modulfuggo-menupontok/</link>
		<comments>http://syx.symboltech.hu/fejlesztesi-kisokos/keretrendszer/modulfuggo-menupontok/#comments</comments>
		<pubDate>Sun, 20 Mar 2011 19:44:14 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Keretrendszer]]></category>
		<category><![CDATA[korlátozás]]></category>
		<category><![CDATA[moduledepends]]></category>
		<category><![CDATA[modulok]]></category>

		<guid isPermaLink="false">http://syx.symboltech.hu/?p=265</guid>
		<description><![CDATA[Amennyiben egy vagy több menüpontot csak bizonyos modul megléte esetén szeretnénk engedélyezni, úgy használhatjuk a ModuleDepends attribútumot. Például: Új menüpont létrehozását támogató metódus előtt elhelyezett [ModuleDepends(SymbolModule.WebData)] attribútum korlátozza, hogy a menüpont csak akkor jelenjen meg, ha a cégnek van WebData modulja.]]></description>
			<content:encoded><![CDATA[<p>Amennyiben egy vagy több menüpontot csak bizonyos modul megléte esetén szeretnénk engedélyezni, úgy használhatjuk a <strong>ModuleDepends </strong>attribútumot.</p>
<p><strong>Például:</strong></p>
<p>Új menüpont létrehozását támogató metódus előtt elhelyezett <strong>[ModuleDepends(SymbolModule.WebData)]</strong> attribútum korlátozza, hogy a menüpont csak akkor jelenjen meg, ha a cégnek van WebData modulja.</p>
]]></content:encoded>
			<wfw:commentRss>http://syx.symboltech.hu/fejlesztesi-kisokos/keretrendszer/modulfuggo-menupontok/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Időzített működés</title>
		<link>http://syx.symboltech.hu/fejlesztesi-kisokos/keretrendszer/idozitett-mukodes/</link>
		<comments>http://syx.symboltech.hu/fejlesztesi-kisokos/keretrendszer/idozitett-mukodes/#comments</comments>
		<pubDate>Sun, 20 Mar 2011 13:31:58 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Keretrendszer]]></category>
		<category><![CDATA[időzítő]]></category>
		<category><![CDATA[rendszeres]]></category>
		<category><![CDATA[timer]]></category>

		<guid isPermaLink="false">http://syx.symboltech.hu/?p=216</guid>
		<description><![CDATA[A SyX beépülők alkalmasak időzített tevékenységek végrehajtására. Mint önállóan futó szerelvények, bármilyen vezérlőt tárolhatnak. A rendszeres időzítés céljából hozzunk létre egy Timer-t, majd: Állítsuk be a Timer Interval értékét a rendszerbeállítások alapján (amelyet a felhaszáló például egy külön ablakon szerkeszthet). A Tick eseményre kössük rá a végrehajtani kívánt metódust. A StartUp() metódusban indítsuk el az [...]]]></description>
			<content:encoded><![CDATA[<p>A SyX beépülők alkalmasak időzített tevékenységek végrehajtására. Mint önállóan futó szerelvények, bármilyen vezérlőt tárolhatnak.</p>
<p>A rendszeres időzítés céljából hozzunk létre egy Timer-t, majd:</p>
<ul>
<li>Állítsuk be a Timer Interval értékét a rendszerbeállítások alapján (amelyet a felhaszáló például egy külön ablakon szerkeszthet).</li>
<li>A Tick eseményre kössük rá a végrehajtani kívánt metódust.</li>
<li>A StartUp() metódusban indítsuk el az időzítőt.</li>
<li>A ShutDown() metódusban állítsek le az időzítőt.</li>
</ul>
<p>A Log() metódussal precízen naplózhatjuk az időzítő indulását, leállítását és tevékenységét.</p>
]]></content:encoded>
			<wfw:commentRss>http://syx.symboltech.hu/fejlesztesi-kisokos/keretrendszer/idozitett-mukodes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>E-mail küldése (PDF bizonylat csatolmánnyal)</title>
		<link>http://syx.symboltech.hu/fejlesztesi-kisokos/keretrendszer/e-mail-kuldese-pdf-bizonylat-csatolmannyal/</link>
		<comments>http://syx.symboltech.hu/fejlesztesi-kisokos/keretrendszer/e-mail-kuldese-pdf-bizonylat-csatolmannyal/#comments</comments>
		<pubDate>Sun, 20 Mar 2011 13:27:14 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Keretrendszer]]></category>
		<category><![CDATA[bizonylat]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[email küldés]]></category>
		<category><![CDATA[email üzenet]]></category>
		<category><![CDATA[pdf]]></category>

		<guid isPermaLink="false">http://syx.symboltech.hu/?p=213</guid>
		<description><![CDATA[A SyX beépülők a void SendEmail(string[] to, string[] cc, string[] bcc, string subject, string body, string[] filenames) metódussal képesek e-mail üzenet küldésére. A felhasználó email beállításai alapján kerül elküldésre az email és a céges rendszerbeállítások alapján, opcionálisan elmentésre kerül az üzenet és annak csatolmányai. Működés jellemzői: Az üzenet törzse HTML tartlmú is lehet. Ilyen esetben [...]]]></description>
			<content:encoded><![CDATA[<p>A SyX beépülők a <strong>void SendEmail(string[] to, string[] cc, string[] bcc, string subject, string body, string[] filenames)</strong> metódussal képesek e-mail üzenet küldésére. A felhasználó email beállításai alapján kerül elküldésre az email és a céges rendszerbeállítások alapján, opcionálisan elmentésre kerül az üzenet és annak csatolmányai.</p>
<p><strong>Működés jellemzői:</strong></p>
<ul>
<li>Az üzenet törzse HTML tartlmú is lehet. Ilyen esetben automatikusan létrejön a Text/Plain melléklet, amely a csak szöveges részeket tartalmazza.</li>
<li>A csatolt fájloknak az üzenet küldésének idején végig létezniük kell. Az üzenet sikeres kiküldése után a fájlok törölhetőek.</li>
<li>Kivétel keletkezik, ha az üzenet nem került elküldésre. Ennek lekezeléséről a SyX beépülőnek kell gondolskodnia.</li>
</ul>
<p><strong>Bizonylatok előállítása PDF formátumban és kiküldésül email üzenetként a megadott email sablon használatával:</strong></p>
<ul>
<li>void <strong>SendVoucherEmailCustomerBid</strong>(long emailvouchertemplate, long customerbid, bool firstpageonly)<br />
Árajánlat kiküldése PDF formátumban a vevő email címére.</li>
<li>void <strong>SendVoucherEmailCustomerOrder</strong>(long emailvouchertemplate, long customerorder, bool firstpageonly)<br />
Vevői rendelés kiküldése PDF formátumban a vevő email címére.</li>
<li>void <strong>SendVoucherEmailStockOut</strong>(long emailvouchertemplate, long stockout, bool firstpageonly, int vouchertype)<br />
Szállítólevél, számla kiküldése PDF formátumban a vevő email címére (utolsó paraméterként szükséges megadni a bizonylat típusát)</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://syx.symboltech.hu/fejlesztesi-kisokos/keretrendszer/e-mail-kuldese-pdf-bizonylat-csatolmannyal/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PDF készítése bizonylatokból</title>
		<link>http://syx.symboltech.hu/fejlesztesi-kisokos/keretrendszer/pdf-keszitese-bizonylatokbol/</link>
		<comments>http://syx.symboltech.hu/fejlesztesi-kisokos/keretrendszer/pdf-keszitese-bizonylatokbol/#comments</comments>
		<pubDate>Sun, 20 Mar 2011 13:21:25 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Keretrendszer]]></category>
		<category><![CDATA[bizonylat]]></category>
		<category><![CDATA[export]]></category>
		<category><![CDATA[pdf]]></category>

		<guid isPermaLink="false">http://syx.symboltech.hu/?p=211</guid>
		<description><![CDATA[Az alábbi metódusokkal a bizonylatok adatairól PDF állományok készíthetőek. A metódusok visszatérési értéke a PDF-et tartalmazó átmeneti állomány. string CreatePDFFromCustomerBid(long customerbid, bool firstpageonly) Árajánlatból PDF készítése. string CreatePDFFromCustomerOrder(long customerorder, bool firstpageonly) Vevői rendelésből PDF készítése. string CreatePDFFromStockOut(long stockout, bool firstpageonly) Szálíltólevélből, számlából (bármilyen készlet(ki)mozgató bizonylatból) PDF készítése.]]></description>
			<content:encoded><![CDATA[<p>Az alábbi metódusokkal a bizonylatok adatairól PDF állományok készíthetőek. A metódusok visszatérési értéke a PDF-et tartalmazó átmeneti állomány.</p>
<p><strong>string CreatePDFFromCustomerBid(long customerbid, bool firstpageonly)</strong></p>
<p>Árajánlatból PDF készítése.</p>
<p><strong>string CreatePDFFromCustomerOrder(long customerorder, bool firstpageonly)</strong></p>
<p>Vevői rendelésből PDF készítése.</p>
<p><strong>string CreatePDFFromStockOut(long stockout, bool firstpageonly)</strong></p>
<p>Szálíltólevélből, számlából (bármilyen készlet(ki)mozgató bizonylatból) PDF készítése.</p>
]]></content:encoded>
			<wfw:commentRss>http://syx.symboltech.hu/fejlesztesi-kisokos/keretrendszer/pdf-keszitese-bizonylatokbol/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Adatváltozás figyelése</title>
		<link>http://syx.symboltech.hu/fejlesztesi-kisokos/keretrendszer/adatvaltozas-figyelese/</link>
		<comments>http://syx.symboltech.hu/fejlesztesi-kisokos/keretrendszer/adatvaltozas-figyelese/#comments</comments>
		<pubDate>Sun, 20 Mar 2011 13:16:42 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Keretrendszer]]></category>
		<category><![CDATA[adatváltozás]]></category>
		<category><![CDATA[datachange]]></category>
		<category><![CDATA[entitychange]]></category>

		<guid isPermaLink="false">http://syx.symboltech.hu/?p=206</guid>
		<description><![CDATA[A rendszer az adatok közül csak azokat menti el, amelyek megváltoztak. Némely esetben ezeket az adatváltozásokat jó lenne figyelemmel kísérni. Erre biztosít lehetőséget a void EntityChanged(PlugInEntityChangeInfo[] entitychangeinfos) metódus felülírása. A metódus felülírásával bizonyos adatok (adatbázis tábla szerint) bizonyos műveletei (adatbázis műveletek = Insert, Update, Delete) alapján dönthetünk arról, hogy a SyX beépülő végrehajtson-e egy műveletet. [...]]]></description>
			<content:encoded><![CDATA[<p>A rendszer az adatok közül csak azokat menti el, amelyek megváltoztak. Némely esetben ezeket az adatváltozásokat jó lenne figyelemmel kísérni. Erre biztosít lehetőséget a <strong>void EntityChanged(PlugInEntityChangeInfo[] entitychangeinfos)</strong> metódus felülírása.</p>
<p>A metódus felülírásával bizonyos adatok (adatbázis tábla szerint) bizonyos műveletei (adatbázis műveletek = Insert, Update, Delete) alapján dönthetünk arról, hogy a SyX beépülő végrehajtson-e egy műveletet.</p>
<p><strong>Minden adatváltozás megjelenítése üzenetablakban:</strong></p>
<p>        protected override void EntityChanged(PlugInEntityChangeInfo[] entitychangeinfos)<br />
        {<br />
            List&lt;string&gt; s = new List&lt;string&gt;();<br />
            foreach (<strong>PlugInEntityChangeInfo </strong>pieci in entitychangeinfos)<br />
                s.Add(String.Format(&#8220;{0} {1} {2}&#8221;,<br />
                     pieci.<strong>EntityType</strong>,<br />
                     pieci.<strong>EntityChangeMode</strong>,<br />
                     pieci.<strong>Id</strong>));<br />
            MessageBox.Show(String.Join(&#8220;\n&#8221;, s.ToArray()));<br />
        }</p>
<p><strong>Működési modell jellemzői:</strong></p>
<ul>
<li>Az adatváltozásról szóló értesítés csak akkor érkezik meg, ha az adatok mentése sikeres volt. Tranzakció visszagörgetésekor semmilyen változás értesítés nem fut be.</li>
<li>A tranzakció közben mentett adatok (új számla, azon egy új vevő, és egy most létrehozozz fizetési mód, majd a számla 15 tétele) együttesen érkeznek be az értesítési folyamatba. Táblánként lehet dönteni arról, hogy mely adatokkal foglalkozunk. A megkapott Id azonosítókon keresztül hozzáférünk a már mentett adatokhoz.</li>
<li>A fenti példával ellentétben <strong>nem célszerű </strong>felhasználói beavatkozást igénylő műveleteket kötni az adatváltozáshoz.</li>
</ul>
<p><strong>Felhasználási példa:</strong></p>
<ul>
<li>Adott bizonylattömbbe rögzített, 1M Ft-nál nagyobb vevői rendelésről automatikusan értesítést küld a rendszer a vezetőnek.</li>
<li>Számla pénzügyi kiegyenlítésekor automatikusan SMS-t küld a vevőnek.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://syx.symboltech.hu/fejlesztesi-kisokos/keretrendszer/adatvaltozas-figyelese/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Keresőfunkciók</title>
		<link>http://syx.symboltech.hu/fejlesztesi-kisokos/felhasznaloi-felulet/keresofunkciok/</link>
		<comments>http://syx.symboltech.hu/fejlesztesi-kisokos/felhasznaloi-felulet/keresofunkciok/#comments</comments>
		<pubDate>Sun, 20 Mar 2011 13:06:43 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Felhasználói felület]]></category>
		<category><![CDATA[füles kereső]]></category>
		<category><![CDATA[keresés]]></category>
		<category><![CDATA[kereső]]></category>

		<guid isPermaLink="false">http://syx.symboltech.hu/?p=196</guid>
		<description><![CDATA[Az alábbi keresőfunkciók érhetőek el a SyX beépülők szintjén. Minden keresőfunkció azonos a Symbol Ügyvitelben használt kereső dialógus ablakokkal. long? SearchCustomer() Vevő kiválasztása füles keresővel long? SearchSupplier() Szállító kiválasztása füles keresővel long? SearchProduct() Termék kiválasztása füles keresővel long? SearchMaintenanceProduct() Javításra leadott termék kiválasztása füles keresővel long? SearchLead() Érdeklődő kiválasztása füles keresővel long? SearchCampaign() Kampány kiválasztása füles [...]]]></description>
			<content:encoded><![CDATA[<p>Az alábbi keresőfunkciók érhetőek el a SyX beépülők szintjén. Minden keresőfunkció azonos a Symbol Ügyvitelben használt kereső dialógus ablakokkal.</p>
<p><strong>long? SearchCustomer()</strong></p>
<p>Vevő kiválasztása füles keresővel</p>
<p><strong>long? SearchSupplier()</strong></p>
<p>Szállító kiválasztása füles keresővel</p>
<p><strong>long? SearchProduct()</strong></p>
<p>Termék kiválasztása füles keresővel</p>
<p><strong>long? SearchMaintenanceProduct()</strong></p>
<p>Javításra leadott termék kiválasztása füles keresővel</p>
<p><strong>long? SearchLead()</strong></p>
<p>Érdeklődő kiválasztása füles keresővel</p>
<p><strong>long? SearchCampaign()</strong></p>
<p>Kampány kiválasztása füles keresővel</p>
<p><strong>long? SelectVoucherSequence(SymbolVoucherType symbolvouchertype)</strong></p>
<p>Bizonylattömb kiválasztása adott bizonylattípushoz. Amennyiben egy ilyen bizonylattömb létezik, úgy a rendszer azt adja vissza. Több bizonylattömb esetén a felhasználónak lehetőséget biztosít a választásra.</p>
<p>Minden füles keresővel való kiválasztás NULL értéket ad vissza, ha a mégsem gombot nyomja meg a felhasználó. Amennyiben a visszaadott érték nem NULL, úgy egy long típusú (akár 64bites) értéket ad, amely a keresett adat egyedi azonosítója (table.ID). Ezt felhasználhatjuk az Entitásokon keresztüli műveleteknél.</p>
<p><strong>Felhasználási javaslat:</strong></p>
<ul>
<li>Külső fájlból érkezett rendelés feldolgozása esetén nem azonosítható a vevő, ezért a vevőkereső funkcióval választunk a meglévő vevők közül.</li>
<li>Nem minden termék azonosítható, azért a termékválasztó segítségével pontosítjuk az adatokat.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://syx.symboltech.hu/fejlesztesi-kisokos/felhasznaloi-felulet/keresofunkciok/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Egyedi vezérlőelemek megjelenítése</title>
		<link>http://syx.symboltech.hu/fejlesztesi-kisokos/felhasznaloi-felulet/egyedi-vezerloelemek-megjelenitese/</link>
		<comments>http://syx.symboltech.hu/fejlesztesi-kisokos/felhasznaloi-felulet/egyedi-vezerloelemek-megjelenitese/#comments</comments>
		<pubDate>Sun, 20 Mar 2011 12:54:16 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Felhasználói felület]]></category>
		<category><![CDATA[egyedi]]></category>
		<category><![CDATA[panel]]></category>
		<category><![CDATA[usercontrol]]></category>
		<category><![CDATA[vezérlő]]></category>

		<guid isPermaLink="false">http://syx.symboltech.hu/?p=193</guid>
		<description><![CDATA[Egyedi vezérlőelemek (célszerűen valamilyen System.Windows.Forms.Panel vagy UserControl leszármazott) főablakon történő megjelenítése is lehetőség van. A megjelenítéshez hozzuk létre a megfelelő vezérlőt és hívjuk meg a megjelenítő metódust. Praktikus ellenőrizni, hogy a vezérlő már létezik-e.         [MenuCommand("HelloWorld: Control létrehozása", MenuCommandLocation.Tools)]         public void CreateAndDisplayControlUC()         {             if (ucdisplay != null) return;             ucdisplay = new [...]]]></description>
			<content:encoded><![CDATA[<p>Egyedi vezérlőelemek (célszerűen valamilyen System.Windows.Forms.Panel vagy UserControl leszármazott) főablakon történő megjelenítése is lehetőség van.</p>
<p>A <strong>megjelenítéshez </strong>hozzuk létre a megfelelő vezérlőt és hívjuk meg a megjelenítő metódust. Praktikus ellenőrizni, hogy a vezérlő már létezik-e.</p>
<p>        [MenuCommand("HelloWorld: Control létrehozása", MenuCommandLocation.Tools)]<br />
        public void CreateAndDisplayControlUC()<br />
        {<br />
            if (ucdisplay != null) return;</p>
<p>            ucdisplay = new UCDisplay();<br />
            this.<strong>DisplayMainFormControl</strong>(ucdisplay, &#8220;Próba Control&#8221;);<br />
        }</p>
<p>A vezérlő <strong>elrejtésére </strong>is van megfelelő metódus. Ilyen esetben is ellenőrizzük, hogy a vezérlő létezik-e még.</p>
<p>        [MenuCommand("HelloWorld: Control megszűntetése", MenuCommandLocation.Tools)]<br />
        public void HideControlUC()<br />
        {<br />
            if (ucdisplay != null)<br />
            {<br />
                this.<strong>HideMainFormControl</strong>(ucdisplay);<br />
                ucdisplay = null;<br />
            }<br />
        }</p>
<p>A létrehozott és megjelenített vezérlő bármilyen egyéb vezérlp tárolására alkalmas. Amennyiben a megjelenített panel-en gombokat, grid-eket kívánunk megjelentetni, lehetőségünk van ezt design módban is megtenni a SyX fejlesztése közben.</p>
<p>A megjelenített vezérlő mozgathatóságáról és pozíciójának elmentéséről a keretrendszer gondoskodik.</p>
<p>A létrehozott vezérlő általánosságban megjeleníthető a StartUp() és elrejthető a ShutDown() metódusokban, ilyenkor a Symbol Ügyvitel futása közben állandóan látszik.</p>
<p><strong> </strong></p>
<p><strong>Felhasználási példák:</strong></p>
<ul>
<li>Tőzsdei grafikonokat megjelenítő UserControl létrehozása, megjelenítéskor (és adott időközönként rendszeresen) adatok lekérése az Interneten keresztül.</li>
<li>Külső állományok meglétének ellenőrzése és azok feldolgozása. Külső rendszerrel való együttműködéskor egy megosztott mappát figyelhet a SyX beépülő. Amikor abban megfelelő fájlok tűnnek fel (pl.: rendelés XML), azokat feldolgozásra meg lehet jeleníteni egy listában.</li>
<li>Menüpontoknál is elérhetőbb helyekre elhelyezett funkciók. Például az Email/SMS küldés funkció elhelyezhető a főablakon két nagy gombbal, a menüpontokban való keresgélés (shortcut is van!) helyett.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://syx.symboltech.hu/fejlesztesi-kisokos/felhasznaloi-felulet/egyedi-vezerloelemek-megjelenitese/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Új lista létrehozása</title>
		<link>http://syx.symboltech.hu/fejlesztesi-kisokos/felhasznaloi-felulet/uj-lista-letrehozasa/</link>
		<comments>http://syx.symboltech.hu/fejlesztesi-kisokos/felhasznaloi-felulet/uj-lista-letrehozasa/#comments</comments>
		<pubDate>Sun, 20 Mar 2011 12:41:19 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Felhasználói felület]]></category>
		<category><![CDATA[egyedi]]></category>
		<category><![CDATA[entitycommand]]></category>
		<category><![CDATA[lista]]></category>
		<category><![CDATA[metódus]]></category>
		<category><![CDATA[szűrő]]></category>
		<category><![CDATA[szűrőfeltételek]]></category>

		<guid isPermaLink="false">http://syx.symboltech.hu/?p=188</guid>
		<description><![CDATA[Új lista létrehozásával tetszőleges adatok jeleníthetőek meg a Symbol Ügyvitel megszokott listaablakain. A listaablakok lehetővé teszik az XLS mentést, a lista nyomtatását PDF, PNG, JPG formátumban, illetve az adatok elküldését e-mail üzenetben. A lista létrehozásához két dolgot kell tennünk. Hozzunk létre egy osztályt a PlugInListFilter osztályból származtatva. Ezáltal szűrőfeltételeket adhatunk a listához. Hozzunk létre egy [...]]]></description>
			<content:encoded><![CDATA[<p>Új lista létrehozásával tetszőleges adatok jeleníthetőek meg a Symbol Ügyvitel megszokott listaablakain. A listaablakok lehetővé teszik az XLS mentést, a lista nyomtatását PDF, PNG, JPG formátumban, illetve az adatok elküldését e-mail üzenetben.</p>
<p>A lista létrehozásához két dolgot kell tennünk.</p>
<ul>
<li>Hozzunk létre egy osztályt a PlugInListFilter osztályból származtatva. Ezáltal szűrőfeltételeket adhatunk a listához.</li>
<li>Hozzunk létre egy metódust, amelynek egyetlen paramétere egy PlugInListFilter-ből származó osztály, visszatérési értéke pedig DataTable.</li>
</ul>
<p><strong>Példa PlugInListFilter leszármazottra</strong></p>
<p>        public class SampleListFilter : PlugInListFilter<br />
        {<br />
            private int i = 3;<br />
            private string str = &#8220;AAA&#8221;;<br />
            private PlugInDateInterval voucherdate =<br />
               new PlugInDateInterval(<br />
                   new DateTime(2011, 1, 1),<br />
                   new DateTime(2011, 12, 31));<br />
            private Customer customer;</p>
<p>            [PlugInFilterCaptionAttribute("Szám")]<br />
            public int I { get { return i; } set { i = value; } }</p>
<p>            [PlugInFilterCaptionAttribute("Név")]<br />
            public string Str { get { return str; } set { str = value; } }</p>
<p>            [PlugInFilterCaptionAttribute("Dátum")]<br />
            public PlugInDateInterval VoucherDate<br />
            { get { return voucherdate; } set { voucherdate = value; } }</p>
<p>            [PlugInFilterCaptionAttribute("Vevő")]<br />
            public Customer Customer { get { return customer; } set { customer = value; } }<br />
        }</p>
<p>A fenti példában a szűrőosztálynak egy szám, egy string, egy dátumintervallum és egy vevő a paraméterei. Ezek a lista megnyitása után, a CTRL+F billentyűvel a szokott módon elérhetőek. A keretrendszer felel érte, hogy a megfelelő adatmezőkhöz a megfelelő beviteli mezők jöjjenek létre: szám=spinedit, szöveg=textedit, dateinterval=intervallum választó, customer=vevőválasztó.</p>
<p>A szűrőosztályban lehetőség van alapértelmezett adatok megadásása is, dátum intervallum típusú mező megadása kötelező!</p>
<p><strong>Példa egyedi listára</strong></p>
<p>        [MenuCustomList("Egyedi lista példa", MenuCommandLocation.Tools)]<br />
        public DataTable SampleCustomList(SampleListFilter filter)<br />
        {<br />
            string cmd = @&#8221;<br />
                SELECT p.&#8221;"Id&#8221;" AS &#8220;&#8221;Azonosító&#8221;", p.&#8221;"Name&#8221;" AS &#8220;&#8221;Név&#8221;", p.&#8221;"Code&#8221;" AS &#8220;&#8221;Kód&#8221;"<br />
                FROM &#8220;&#8221;Product&#8221;" p<br />
                WHERE p.&#8221;"Name&#8221;" LIKE &#8216;A%&#8217;<br />
                      {0}<br />
                ORDER BY 2&#8243;;</p>
<p>            List&lt;string&gt; where = new List&lt;string&gt;();<br />
            if (!String.IsNullOrEmpty(filter.Str))<br />
                where.Add(@&#8221;AND p.&#8221;"Code&#8221;" NOT LIKE &#8216;%T&#8217;&#8221;);<br />
            if (filter.Customer != null)<br />
                where.Add(@&#8221;AND p.&#8221;"Id&#8221;" == &#8221; + filter.Customer.Id.ToString());<br />
            if (filter.VoucherDate.Filled)<br />
                where.Add(@&#8221;AND p.&#8221;"CreateDateTime&#8221;" &gt; &#8216;&#8221; + filter.VoucherDate.DateFrom + &#8220;&#8216;&#8221;);</p>
<p>            using (EntityHandler handler = CreateEntityHandler(false))<br />
                return handler.ExecuteQuery(String.Format(cmd, String.Join(&#8221; &#8220;, where.ToArray())));<br />
        }</p>
<p>A példa alapján egy új menüpont jön létre az Esközök menüpontban. A lista megnyitása után a korábbi szűrőfeltételekkel dolgozhatunk. A lista adatainek lekérdezéséért az itt definiált egyedi SQL Select a felelős. Ebben a szűrőoszály mezőit felhasználhatjuk.</p>
<p>A végeredmény visszaadásához használjuk az EntityHandler megfelelő metódusát, amely DataTable típusú adatot ad vissza.</p>
]]></content:encoded>
			<wfw:commentRss>http://syx.symboltech.hu/fejlesztesi-kisokos/felhasznaloi-felulet/uj-lista-letrehozasa/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>5. SQL Select futtatása</title>
		<link>http://syx.symboltech.hu/fejlesztesi-kisokos/adatbazis-eleres/sql-select-futtatasa/</link>
		<comments>http://syx.symboltech.hu/fejlesztesi-kisokos/adatbazis-eleres/sql-select-futtatasa/#comments</comments>
		<pubDate>Sun, 20 Mar 2011 11:00:45 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Adatbázis elérés]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[entityhandler]]></category>
		<category><![CDATA[query]]></category>
		<category><![CDATA[select]]></category>

		<guid isPermaLink="false">http://syx.symboltech.hu/?p=244</guid>
		<description><![CDATA[SyX beépülőben általában nincs szükség arra, hogy általunk írt SELECT lekérdezést futtassunk, de néha elengedhetetlen. Amennyiben a SyX készítője tisztában van az adatmodellel és ismeri a Firebird SQL szintaktikáját, akkor az EntityHandler.ExecuteQuery() metódussal a futtatás megoldható. Példa egy SELECT futtatására, ahol csak a SELECT miatt hozunk létre egy adatbáziskapcsolatot:    using (EntityHandler handler = CreateEntityHandler(false)) [...]]]></description>
			<content:encoded><![CDATA[<p>SyX beépülőben általában nincs szükség arra, hogy általunk írt SELECT lekérdezést futtassunk, de néha elengedhetetlen. Amennyiben a SyX készítője tisztában van az adatmodellel és ismeri a Firebird SQL szintaktikáját, akkor az <strong>EntityHandler.ExecuteQuery()</strong> metódussal a futtatás megoldható.</p>
<p><strong>Példa egy SELECT futtatására, ahol csak a SELECT miatt hozunk létre egy adatbáziskapcsolatot:</strong></p>
<p>   using (EntityHandler handler = CreateEntityHandler(false))<br />
                return handler.<strong>ExecuteQuery</strong>(&#8220;SELECT * FROM &#8220;&#8221;Customer&#8221;" c&#8221;);</p>
]]></content:encoded>
			<wfw:commentRss>http://syx.symboltech.hu/fejlesztesi-kisokos/adatbazis-eleres/sql-select-futtatasa/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>4. Üzleti logika a beépülőkben</title>
		<link>http://syx.symboltech.hu/fejlesztesi-kisokos/adatbazis-eleres/uzleti-logika-a-beepulokben/</link>
		<comments>http://syx.symboltech.hu/fejlesztesi-kisokos/adatbazis-eleres/uzleti-logika-a-beepulokben/#comments</comments>
		<pubDate>Sun, 20 Mar 2011 10:00:32 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Adatbázis elérés]]></category>
		<category><![CDATA[BLL]]></category>
		<category><![CDATA[business logic]]></category>
		<category><![CDATA[business logic layer]]></category>
		<category><![CDATA[üzleti logika]]></category>

		<guid isPermaLink="false">http://syx.symboltech.hu/?p=253</guid>
		<description><![CDATA[A SyX beépülők entitás technológiájának előnye, hogy üzleti logika köthető hozzá és a már meglévő üzleti logikát nem kell újra megvalósítani. Entitás osztályok kibővítése Az SDK részét képező entitás osztályok partial class-kétn kerültek megvalósításra, így a SyX-ek maguk tartalmazhatnak további üzleti logikákat, amelyekkel a gyári funkaiconalitást bővíteni lehet. Például: A ToString() metódus felülírható (override), ezáltal a gyáritól [...]]]></description>
			<content:encoded><![CDATA[<p>A SyX beépülők entitás technológiájának előnye, hogy üzleti logika köthető hozzá és a már meglévő üzleti logikát nem kell újra megvalósítani.</p>
<p><strong>Entitás osztályok kibővítése</strong></p>
<p>Az SDK részét képező entitás osztályok partial class-kétn kerültek megvalósításra, így a SyX-ek maguk tartalmazhatnak további üzleti logikákat, amelyekkel a gyári funkaiconalitást bővíteni lehet. Például:</p>
<p>A ToString() metódus felülírható (override), ezáltal a gyáritól eltérő viselkedés hozható létre.</p>
<p>Új metódusokat lehet létrehozni, amelyek az adott entitás osztályhoz köthetőek. Például adatellenőrzés.</p>
<p>Új property-ket lehet létrehozni, amelyek nem kerülnek tárolásra, de valamilyen speciális funkcióval bírhatnak. Páldául a Customer osztályt AddressConcatenate property-vel bővítve a cím mezők egymás után fűzött szöveges mezőként is rendelkezésre állnak, például két vevő összehasonlításához vagy rendezéséhez.</p>
<p><strong>Entitásgyűjtemény osztályok kibővítése</strong></p>
<p>Az entitás osztályokhoz hasonlóan az entitásgyűjtemény osztályok is kibővíthetőek új metódusokkal, property-kkel.</p>
<p><strong>Eredeti üzleti logika alkalmazása</strong></p>
<p>Mivel az entitások a Symbol Ügyvitel alkalmazás memóriaterületén jönnek létre, az ott használt üzleti logika automatikusan alkalmazásra kerül, azt kikerülni nem is lehet. Például:</p>
<ul>
<li>Rendszerbeállítástól függően, az új <strong>vevő/szállító (Customer) adatok létrehozásukkor automatikusan kapnak kódot</strong>. Ez a működés akkor is igaz, amikor CustomerAdapter.CreateNewObject() vagy CustomerAdapter.CreateEmptyCollection.AddNew() hatására egy új objektum jön létre.</li>
<li>Számla dátumainak módosításakor, számla mód (ÁFA58, gyűjtőszámla) függvényében automatikusan beállításra kerülnek a dátumok.</li>
<li>Bizonylatok tételeinek módosításakor a bizonylat fejben tárolt nettó. áfa, bruttó összegek automatikusan kiszámolásra kerülnek. A kerekítési szabályok a beállított pénznem alapján kerülnek alkalmazásra.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://syx.symboltech.hu/fejlesztesi-kisokos/adatbazis-eleres/uzleti-logika-a-beepulokben/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>3. Adapter = Entitások létrehozása</title>
		<link>http://syx.symboltech.hu/fejlesztesi-kisokos/adatbazis-eleres/adapter-entitasok-letrehozasa/</link>
		<comments>http://syx.symboltech.hu/fejlesztesi-kisokos/adatbazis-eleres/adapter-entitasok-letrehozasa/#comments</comments>
		<pubDate>Sun, 20 Mar 2011 09:00:52 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Adatbázis elérés]]></category>
		<category><![CDATA[adapter]]></category>
		<category><![CDATA[entitás]]></category>
		<category><![CDATA[new]]></category>

		<guid isPermaLink="false">http://syx.symboltech.hu/?p=247</guid>
		<description><![CDATA[Az entitások önmagukban reprezentálnak egy sort az adatbázisban, objektumként minden mezőhőz hozzáférési lehetőséget biztosítanak. Mindezt típusosan. Az entitásoknak azonban valahogy létre kell jönniük. Önállóan, a new Customer() nem alkalmas arra, hogy az entitás létrejöjjön. Az EntityHandler példány annyi Adaptert tartalmaz, ahány féle táblánk van az adatbázisban. A Customer entitás kezeléséhez az EntityHandler.CustomerAdapter, a Product entitás-hoz [...]]]></description>
			<content:encoded><![CDATA[<p>Az entitások önmagukban reprezentálnak egy sort az adatbázisban, objektumként minden mezőhőz hozzáférési lehetőséget biztosítanak. Mindezt típusosan. Az entitásoknak azonban valahogy létre kell jönniük. Önállóan, a <strong>new Customer() nem alkalmas </strong>arra, hogy az entitás létrejöjjön.</p>
<p>Az EntityHandler példány annyi Adaptert tartalmaz, ahány féle táblánk van az adatbázisban. A <strong>Customer </strong>entitás kezeléséhez az <strong>EntityHandler.CustomerAdapter</strong>, a <strong>Product </strong>entitás-hoz pedig az <strong>EntityHandler.ProductAdapter </strong>lesz segítségünkre. Az adapterek az alábbi metódusokat tartalmazzák (<em>a metódushívások a using (EntityHandler handler = CreateEntityHandler()) blokkon belül értendőek</em>):</p>
<ul>
<li>CustomerCollection <strong>CreateEmptyCollection</strong>(): Üres entitásgyűjtemény létrehozása, amelyhez entitásokat adhatunk hozzá vagy a gyűjtemény AddNew() metódusát meghívva új entitást hozhatunk létre benne.</li>
<li>Customer <strong>CreateNewObject</strong>(): Új entitás példány létrehozása önállóan. Az entitás nem egy gyűjteményben jön létre, önállóan létezik.</li>
<li>CustomerCollection <strong>SelectAll</strong>(): Összes entitás lekérdezése és elhelyezése egy entitás gyűjteménybe. (WHERE nélküli SELECT). Amennyiben az entitásnak van Deleted mezője, úgy a SelectAll() paramétere a ShowDeleted, amely alapján eldől, hogy minden elemet vagy csak a nem törölteket jelenítsük meg.</li>
<li>Customer <strong>SelectByPK</strong>(long id): Adott ID-jú elem beolvasása és létrehozása önálló entitásként.</li>
<li>CustomerCollection <strong>SelectByCondition</strong>(WhereClause whereclause): Megadott SQL WHERE szűrőfeltételeknek megfelelő adatbázis sorok kiolvasása a táblából.</li>
</ul>
<p><strong> </strong></p>
<p><strong>WhereClause?</strong></p>
<p>A WhereClause egy típusos WHERE feltétel megírását támogató eszköz. Amennyiben a tábla és mezőneveket pontosan kívánjuk megadni, úgy célszerű használni az XXXField konstansokat.</p>
<p>Például:</p>
<p>                    <strong>WhereClause </strong>wc = CustomerField.Phone == &#8220;20-555-7845&#8243; | CustomerField.Name == &#8220;Csaba&#8221;;<br />
                    CustomerCollection cc = handler.CustomerAdapter.SelectByCondition(<strong>wc &amp; CustomerField.PaymentMethod != 12</strong>);</p>
]]></content:encoded>
			<wfw:commentRss>http://syx.symboltech.hu/fejlesztesi-kisokos/adatbazis-eleres/adapter-entitasok-letrehozasa/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>2. Minden adat = entitás</title>
		<link>http://syx.symboltech.hu/fejlesztesi-kisokos/adatbazis-eleres/minden-adat-entitas/</link>
		<comments>http://syx.symboltech.hu/fejlesztesi-kisokos/adatbazis-eleres/minden-adat-entitas/#comments</comments>
		<pubDate>Sun, 20 Mar 2011 08:00:33 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Adatbázis elérés]]></category>
		<category><![CDATA[adatmodell]]></category>
		<category><![CDATA[entitás]]></category>
		<category><![CDATA[idegen kulcsok]]></category>
		<category><![CDATA[objektum]]></category>
		<category><![CDATA[relációk]]></category>

		<guid isPermaLink="false">http://syx.symboltech.hu/?p=235</guid>
		<description><![CDATA[Az entitás jellegű megközelítési mód minden adatot típusos formában enged kezelni. Ennek elsődleges célja és előnye, hogy nem tudunk mezőnév elírás miatt nem létező adatra hivatkozni, a projekt fordítésa során pedig már a fejlesztőkörnyezetben hibát kapunk, ha nem létező mezőre hivatkozunk. Külön kiemelendő, hogy az idegen kulcsokon való kapcsolódás is erősen típusos formában valósul meg. [...]]]></description>
			<content:encoded><![CDATA[<div>
<div>Az entitás jellegű megközelítési mód minden adatot típusos formában enged kezelni. Ennek elsődleges célja és előnye, hogy nem tudunk mezőnév elírás miatt nem létező adatra hivatkozni, a projekt fordítésa során pedig már a fejlesztőkörnyezetben hibát kapunk, ha nem létező mezőre hivatkozunk. Külön kiemelendő, hogy az idegen kulcsokon való kapcsolódás is erősen típusos formában valósul meg.</div>
<p><strong> </strong></p>
<div><strong><strong>Entitások</strong></strong></div>
<div>
<div>Minden adat egy-egy entitás objektum. Egy létrehozott vagy betöltött vevő egy Customer objektum példányként kezelhető. A Customer objektumban megtalálható minden mező, amely az adatbázisban rendelkezésre áll. Ezek a mezők a megfelelő típussal rendelkeznek.</div>
<p><strong> </strong><strong> </strong></p>
<div><strong>Például:</strong></div>
<p><strong>    Customer c = handler.CustomerAdapter.CreateNewObject();<br />
    c.Name = &#8220;Sample&#8221;; <em>// string mező, mert az adatbázisban VARCHAR(100)</em><br />
    c.SaveChanges(); <em>// adatok mentése, csak implicit módban van rá szükség</em></p>
<p>Minden entitás rendelkezik az alábbi metódusokkal:</p>
<ul>
<li>Delete(); <em>// adat törlése; a rendszer figyelembe veszi, hogy az entitást fizikailag kell törölni, vagy csak logikailag (deleted=0)</em></li>
<li>Display(); <em>// adat megjelenítése a szerkesztőablakában (nem minden entitásra érhető el)</em></li>
<li>DisplayAsDialog(); <em>// adat megjelenítése a szerkesztőablakában modálisan (nem minden entitásra érhető el)</em></li>
</ul>
<p>Az entitáshoz kapcsolódó idegen kulcsok elérhetőek objektumok szintjén (entitás) is. Például a <strong>Customer.PaymentMethod</strong> tartalmazza a vevő fizetési módjának ID-ját, míg a <strong>Customer.PaymentMethod<span style="text-decoration: underline;">Obj</span></strong> a fizetési módot objektumként engedi elérni. Így láncoltan érhetőek el az adatok: <strong>Customer.PaymentMethodObj.DiscountPercent</strong> =&gt; vevő fizetési módjának kedvezmény mértéke.</p>
<p><strong> </strong></p>
<p><strong>Entitásgyűjtemények</strong></p>
<div>Egynél több entitás gyűjteménybe szervezhető. A CustomerCollection például több vevőt fog össze. A gyűjtemények mentésekor a gyűjtemény minden elemének mentése megtörténik. A gyűjtemények felhasználási módjai:</div>
<div><strong> </strong></div>
<div><strong></strong></div>
<p><strong></p>
<ul>
<li><strong>Üres gyűjtemény </strong>létrehozása új adat hozzáadása céljából: CustomerCollection.AddNew();</li>
<li><strong>Minden adat </strong>lekérdezése: Minden fizetési mód lekérdezésekor PaymentMethodCollection típusú objektum jön létre.</li>
<li><strong>Szűrt adathalmaz </strong>lekérdezése: &#8220;A&#8221; betűvel kezdődő nevű vevők lekérdezéskor CustomerCollection jön létre.</li>
<li>Kapcsolódó <strong>gyermekobjektum </strong>gyűjtemények: Egy entitás objektum gyermek objektumaihoz való hozzáférés során is gyűjteményeket kapunk. Customer.ChildDocumentByCustomer a Document tábla azon entitás sorait adja vissza, amelyek ehhez a vevőhöz tartoznak. Fontos kiemelni, hogy a gyerekgyűjteményekhez való hozzáadás esetén a szülőre mutató hivatkozás beállítása kerül, a Customer.ChildDocumentByCustomer.AddNew() metódushívás során egy olyan dokumentum entitás jön létre, amelynek mentésekor a vevőhöz fog tartozni.</li>
</ul>
<p>Gyűjtemények műveletei:</p>
<ul>
<li>Indexelés: A gyűjtemény tömbként indexelhető.</li>
<li>AddNew(): új objektum létrehozása a gyűjteményben.</li>
<li>Count: elemek száma.</li>
<li>Filter és Find: adott feltételnek megfelelő elemek (Find esetén első elem) kiválasztása a gyűjtemény szűkítésével.</li>
</ul>
<p> </p>
<p></strong></strong> </p>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://syx.symboltech.hu/fejlesztesi-kisokos/adatbazis-eleres/minden-adat-entitas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>1. Adatbázis kapcsolat kiépítése</title>
		<link>http://syx.symboltech.hu/fejlesztesi-kisokos/adatbazis-eleres/adatbazis-kapcsolat-kiepitese/</link>
		<comments>http://syx.symboltech.hu/fejlesztesi-kisokos/adatbazis-eleres/adatbazis-kapcsolat-kiepitese/#comments</comments>
		<pubDate>Sun, 20 Mar 2011 07:00:41 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Adatbázis elérés]]></category>
		<category><![CDATA[adatbázis kapcsolat]]></category>
		<category><![CDATA[adatbáziskapcsolat]]></category>

		<guid isPermaLink="false">http://syx.symboltech.hu/?p=232</guid>
		<description><![CDATA[A SyX beépülők nem kell, hogy &#8220;kézzel&#8221; hozzanak létre adatbázis kapcsolatot. Minden adat elérhető típusos, entitás jellegű formában. Ehhez elég egy metódus meghívni és felépül az adatbázis kapcsolat. A CreateEntityHandler metódus hasznlatával az alábbi módon hozhatunk létre adatbázis kapcsolatot:                 using (EntityHandler handler = CreateEntityHandler())                 {                      &#8230;                 } A létrehozozz adatbázis kapcsolatot minden [...]]]></description>
			<content:encoded><![CDATA[<p>A SyX beépülők nem kell, hogy &#8220;kézzel&#8221; hozzanak létre adatbázis kapcsolatot. Minden adat elérhető típusos, entitás jellegű formában. Ehhez elég egy metódus meghívni és felépül az adatbázis kapcsolat.</p>
<p>A <strong>CreateEntityHandler </strong>metódus hasznlatával az alábbi módon hozhatunk létre adatbázis kapcsolatot:</p>
<p>                using (EntityHandler handler = CreateEntityHandler())<br />
                {<br />
                     &#8230;</p>
<p>                }</p>
<p>A létrehozozz adatbázis kapcsolatot minden esetben using kulcsszóval kell használni, hogy szigorúan vezéreljük a kapcsolat bezárását. A Microsoft Entity Framework-höz hasonlóan az EntityHandler példány ideje alatt minden adatbázis elemhez hozzáférhetünk, azokat módosíthatjuk, majd az EntityHandler megszűnésekor a változások rögzítésre kerülnek az adatbázisban.</p>
<p>Az EntityHandler használata során létrehozott adatok csak addig érhetőek el, amíg az EntityHandler létezik!</p>
<p><strong>Meddig tartsam nyitva az adatbázis kapcsolatot?</strong></p>
<p>Az adatbázis kapcsolatot addig kell és szabad nyitva tartani, amíg arra szükség van. Az alábbi ökölszabélyokat célszerű figyelembe venni:</p>
<ul>
<li>Adatbázis kapcsolatot az első adat elérése előtt létre kell hozni</li>
<li>Adatbázis kapcsolatot az utolsó adathoz való hozzáférés után meg kell szüntetni</li>
<li>Egy metódushíváson belül nem célszerű több alkalommal létrehozni az adatbázis kapcsolatot, inkább a using blokkot kell úgy szervezni, hogy az hosszabb ideig legyen nyitva.</li>
<li>Nem szabad egymásba ágyazott adatbázis kapcsolatot létrehozni</li>
<li>Egy adatbázis kapcsolaton belüli adatmentés (kivéve az implicit esetet) egy tranzakcióban valósul meg</li>
</ul>
<p><strong>Nem akarok minden adatok menteni</strong></p>
<p>Lehetőség van arra is, hogy az EntityHandler használata során betöltött és megváltoztatott adatok ne kerüljenek mentésre. Ilyenkor a CreateEntityHandler(false) hívási módot kell használnunk. Az adatok mentését implicit módon, a SaveChanges() meghívásával kell elvégeznünk.</p>
<p style="text-align: center;"><em>A using nélkül használt EntityHandler-re a Symbol Tech Kft. nem adja ki a SyX tanúsítványt!</em></p>
]]></content:encoded>
			<wfw:commentRss>http://syx.symboltech.hu/fejlesztesi-kisokos/adatbazis-eleres/adatbazis-kapcsolat-kiepitese/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Keretrendszer beépített funkciói &#8211; Folyamatjelző</title>
		<link>http://syx.symboltech.hu/fejlesztesi-kisokos/felhasznaloi-felulet/keretrendszer-beepitett-funkcioi-folyamatjelzo/</link>
		<comments>http://syx.symboltech.hu/fejlesztesi-kisokos/felhasznaloi-felulet/keretrendszer-beepitett-funkcioi-folyamatjelzo/#comments</comments>
		<pubDate>Tue, 23 Mar 2010 14:34:50 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Felhasználói felület]]></category>
		<category><![CDATA[folyamatjelző]]></category>

		<guid isPermaLink="false">http://syx.symboltech.hu/?p=177</guid>
		<description><![CDATA[A hosszabb műveletek alatt a rendszer lehetőséget nyújt folyamatjelző ablak megjelenítésére.Az egységes megjelenés érdekében célszerű az alábbi osztály használata: using(ProgressForm prog = CreateProgressForm(&#8220;Folyamatjelzés folyamatban&#8230;&#8221;)) {     for(int i=0;i&#60;100;i++)     {         prog.UpdateStatus(String.Format(&#8220;{0}. lépés&#8221;, i));         System.Threading.Thread.Sleep(50);     } } A folyamatjelző ablak a Dispose() lefutása után (using!) automatikusan eltűnik. Gyakori igény, hogy a folyamat közben [...]]]></description>
			<content:encoded><![CDATA[<p>A hosszabb műveletek alatt a rendszer lehetőséget nyújt folyamatjelző ablak megjelenítésére.Az egységes megjelenés érdekében célszerű az alábbi osztály használata:</p>
<p>using(<strong>ProgressForm prog = CreateProgressForm(&#8220;Folyamatjelzés folyamatban&#8230;&#8221;)</strong>)</p>
<p>{</p>
<p>    for(int i=0;i&lt;100;i++)</p>
<p>    {</p>
<p>        prog.<strong>UpdateStatus</strong>(String.Format(&#8220;{0}. lépés&#8221;, i));</p>
<p>        System.Threading.Thread.Sleep(50);</p>
<p>    }</p>
<p>}</p>
<p>A folyamatjelző ablak a Dispose() lefutása után (using!) automatikusan eltűnik.</p>
<p>Gyakori igény, hogy a folyamat közben a folyamatjelző csík átmenetileg eltűnjön, helyet adva valamilyen felhasználói tevékenységet igénylő ablaknak. Ebben segít a <strong>ProgressHider CreateProgressHider()</strong> metódus, amelyet szintén using kulcsszó mellett kell használni. A using idejére a folyamatjelző ablak elrejtésre kerül.</p>
]]></content:encoded>
			<wfw:commentRss>http://syx.symboltech.hu/fejlesztesi-kisokos/felhasznaloi-felulet/keretrendszer-beepitett-funkcioi-folyamatjelzo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Keretrendszer beépített funkciói &#8211; Homokóra</title>
		<link>http://syx.symboltech.hu/fejlesztesi-kisokos/felhasznaloi-felulet/keretrendszer-beepitett-funkcioi-homokora/</link>
		<comments>http://syx.symboltech.hu/fejlesztesi-kisokos/felhasznaloi-felulet/keretrendszer-beepitett-funkcioi-homokora/#comments</comments>
		<pubDate>Tue, 23 Mar 2010 14:30:26 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Felhasználói felület]]></category>
		<category><![CDATA[homokóra]]></category>
		<category><![CDATA[várakozás]]></category>

		<guid isPermaLink="false">http://syx.symboltech.hu/?p=173</guid>
		<description><![CDATA[A hosszabb műveletek alatt a rendszer lehetőséget nyújt a homokóra megjelenítésére. Hogy a megjelenített homokóra szinkronban legyen a Symbol Ügyvitel által megjelenített homokórával, célszerű az alábbi osztály használata: using(CreateWaitCursor()) {   hosszabb művelet&#8230; } A homokóra a Dispose() lefutása után (using!) automatikusan eltűnik.]]></description>
			<content:encoded><![CDATA[<p>A hosszabb műveletek alatt a rendszer lehetőséget nyújt a homokóra megjelenítésére. Hogy a megjelenített homokóra szinkronban legyen a Symbol Ügyvitel által megjelenített homokórával, célszerű az alábbi osztály használata:</p>
<p>using(<strong>CreateWaitCursor()</strong>)</p>
<p>{</p>
<p>  hosszabb művelet&#8230;</p>
<p>}</p>
<p>A homokóra a Dispose() lefutása után (using!) automatikusan eltűnik.</p>
]]></content:encoded>
			<wfw:commentRss>http://syx.symboltech.hu/fejlesztesi-kisokos/felhasznaloi-felulet/keretrendszer-beepitett-funkcioi-homokora/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Keretrendszer beépített funkciói</title>
		<link>http://syx.symboltech.hu/fejlesztesi-kisokos/keretrendszer/keretrendszer-beepitett-funkcioi/</link>
		<comments>http://syx.symboltech.hu/fejlesztesi-kisokos/keretrendszer/keretrendszer-beepitett-funkcioi/#comments</comments>
		<pubDate>Tue, 23 Mar 2010 14:25:49 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Keretrendszer]]></category>
		<category><![CDATA[beállítás]]></category>
		<category><![CDATA[cégadat]]></category>
		<category><![CDATA[metódus]]></category>
		<category><![CDATA[üzenetablak]]></category>

		<guid isPermaLink="false">http://syx.symboltech.hu/?p=170</guid>
		<description><![CDATA[A keretrendszer az alábbi beépített funkciókkal segíti a fejlesztést: void Log(LogType logtype, string message) void Log(LogType logtype, string message, string description) void Log(string location, Exception ex) Naplózást valósít meg. A naplóbejegyzések bekerülnek az adatbázisba, és SyX konzol használata esetén a felületen is megjelennek. Paraméterezési lehetőég, hogy részletes információt is meg lehet adni a naplózáskor. Ennek [...]]]></description>
			<content:encoded><![CDATA[<p>A keretrendszer az alábbi beépített funkciókkal segíti a fejlesztést:</p>
<p><strong>void Log(LogType logtype, string message)</strong></p>
<p><strong>void Log(LogType logtype, string message, string description)</strong></p>
<p><strong>void Log(string location, Exception ex)</strong></p>
<p>Naplózást valósít meg. A naplóbejegyzések bekerülnek az adatbázisba, és SyX konzol használata esetén a felületen is megjelennek. Paraméterezési lehetőég, hogy részletes információt is meg lehet adni a naplózáskor. Ennek mérete max 2GB lehet.</p>
<p>Lehetőség van a hibát közvetlenül naplózni. Ilyen esetben a LogType értéke Error lesz, az Exception szövege és a TrackTrace pedig bekerül a részletes leírásba.</p>
<p><strong>void Debug(LogType logtype, string message)</strong></p>
<p>A Log metódus mintájára lehetőség van naplózásra, de a naplózás csak DEBUG üzemmódban kerül meghívásra. Ezzel megoldható, hogy csak fejlesztési időben szükséges naplózási funkciók is benne maradhassanak a forráskódban.</p>
<p><strong> </strong></p>
<p><strong>CompanyInfo GetCompanyInfo()</strong></p>
<p>A rendszer cégadatainak elérésére szolgáló metódus.</p>
<p><strong>LoggedInUserInfo GetLoggedInUserInfo()</strong></p>
<p>A bejelentkezett felhasználó adatainak elérésére szolgáló metódus.</p>
<p><strong> </strong></p>
<p><strong>void MessageBoxInfo(string text, string caption)</strong></p>
<p><strong>void MessageBoxError(string text, string caption)</strong></p>
<p><strong>void MessageBoxException(string location, Exception ex)</strong></p>
<p><strong>void MessageBoxQuestion(string text, string caption)</strong></p>
<p>Különböző stílusú, szabványos üzenetablakok megjelenítése. Megjeleníthető információs, hibajelző, kérdés ablak.</p>
<p><strong> </strong></p>
<p><strong>void SetSystemSetting(string name, object value)</strong></p>
<p><strong>void SetUserSetting(string name, object value)</strong></p>
<p><strong>object GetSystemSetting(string name)</strong></p>
<p><strong>object GetUserSetting(string name)</strong></p>
<p>Rendszerfüggő (cégfüggő) és felhasználóhoz köthető beállításor írása és olvasása. A SyX beépülőnek nem kell megvalósítania a beállítások tárolását, nem szükséges (sok esetben, biztonsági okokból nem is lehetséges) a registry írása/olvasása. A Symbol Ügyvitel lehetőséget biztosít, hogy SyX beépülőnként tároljuk a rendszer és felhasználói szintű beállításokat. A beállítások értékének sorosíthatónak kell lennie és a biztonságok típuskonverzióról (Convert.ToXXX()) a felhasználónak kell gondoskodnia.</p>
]]></content:encoded>
			<wfw:commentRss>http://syx.symboltech.hu/fejlesztesi-kisokos/keretrendszer/keretrendszer-beepitett-funkcioi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Felülírható metódusok</title>
		<link>http://syx.symboltech.hu/fejlesztesi-kisokos/keretrendszer/felulirhato-metodusok/</link>
		<comments>http://syx.symboltech.hu/fejlesztesi-kisokos/keretrendszer/felulirhato-metodusok/#comments</comments>
		<pubDate>Tue, 23 Mar 2010 14:05:35 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Keretrendszer]]></category>
		<category><![CDATA[felülírás]]></category>
		<category><![CDATA[metódus]]></category>
		<category><![CDATA[override]]></category>

		<guid isPermaLink="false">http://syx.symboltech.hu/?p=168</guid>
		<description><![CDATA[A BasePlugin metódusai közül az alábbi metódusok írhatóak felül: bool StartUp() SyX beépülő indításakor meghívásra kerülő metódus. Célja, hogy az induláskor elvégzendő műveleteket meg lehessen valósítani. Példa: A konstruktorban létrehozott Timer indítása. bool ShutDown() SyX beépülő leállításakor meghívásra kerülő metódus. Célja, hogy a folyamatosan használt erőforrásokat felszabadítsuk. Példa: A StartUp()-kor elindított Timer leállítása. A ShutDown() [...]]]></description>
			<content:encoded><![CDATA[<p>A BasePlugin metódusai közül az alábbi metódusok írhatóak felül:</p>
<p><strong>bool StartUp()</strong></p>
<p>SyX beépülő indításakor meghívásra kerülő metódus. Célja, hogy az induláskor elvégzendő műveleteket meg lehessen valósítani. Példa: A konstruktorban létrehozott Timer indítása.</p>
<p><strong>bool ShutDown()</strong></p>
<p>SyX beépülő leállításakor meghívásra kerülő metódus. Célja, hogy a folyamatosan használt erőforrásokat felszabadítsuk. Példa: A StartUp()-kor elindított Timer leállítása. A ShutDown() metódus után a StartUp() metódus meghívása elképzelhető, a használt objektumokat nem szabad felszabadítani.</p>
<p><strong>Image GetPlugInIcon()</strong></p>
<p>SyX beépülő ikonjánat kinyerésére szolgáló metódus. Célja, hogy a SyX beépülőhöz rendelt ikon megjelenhessen az Eszközök menüben.</p>
<p><strong>Image GetMethodIcon(string methodname)</strong></p>
<p>SyX beépülő által definiált új menüpontok és ribbon gombok ikonjának kinyerésére szolgáló metódus. A metódusnak egy, legalább 32x32px-es, lehetőleg 24bites PNG, JPG, BMP ikont kell visszaadnia. A nagy méretű ikonok automatikusan átméretezésre kerülnek.</p>
]]></content:encoded>
			<wfw:commentRss>http://syx.symboltech.hu/fejlesztesi-kisokos/keretrendszer/felulirhato-metodusok/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Adathoz kötött ribbon gomb létrehozása</title>
		<link>http://syx.symboltech.hu/fejlesztesi-kisokos/felhasznaloi-felulet/adathoz-kotott-ribbon-gomb-letrehozasa/</link>
		<comments>http://syx.symboltech.hu/fejlesztesi-kisokos/felhasznaloi-felulet/adathoz-kotott-ribbon-gomb-letrehozasa/#comments</comments>
		<pubDate>Tue, 23 Mar 2010 13:48:23 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Felhasználói felület]]></category>
		<category><![CDATA[entitycommand]]></category>
		<category><![CDATA[metódus]]></category>
		<category><![CDATA[ribbon gomb]]></category>

		<guid isPermaLink="false">http://syx.symboltech.hu/?p=165</guid>
		<description><![CDATA[Adathoz kötött ribbon gomb létrehozásához két lépés szükséges Hozzunk létre egy tetszőleges nevű publikus metódust a főosztályban, amelynek egy paramétere van Rendeljünk hozzá egy EntityCommand attribútumot. Az attribútum első paramétere a új menüpont neve, második paramétere az az adattípus, amelyhez az új menüpontot rendeljük. Ez lehet: Vevő, Szállító, Termék, Bizonylatok/bizonylattípusok [EntityCommand("Vevő keresése az interneten", EntityCommandLocation.Customer)] public void SearchCustomer(long id) { [...]]]></description>
			<content:encoded><![CDATA[<p>Adathoz kötött ribbon gomb létrehozásához két lépés szükséges</p>
<ul>
<li>Hozzunk létre egy tetszőleges nevű publikus metódust a főosztályban, amelynek egy paramétere van</li>
<li>Rendeljünk hozzá egy EntityCommand attribútumot. Az attribútum első paramétere a új menüpont neve, második paramétere az az adattípus, amelyhez az új menüpontot rendeljük. Ez lehet: Vevő, Szállító, Termék, Bizonylatok/bizonylattípusok</li>
</ul>
<p>[<strong>EntityCommand</strong>("Vevő keresése az interneten", EntityCommandLocation.Customer)]<br />
public void <strong>SearchCustomer</strong>(long id)</p>
<p>{</p>
<p>write code here&#8230;</p>
<p>}</p>
<p><em>Megjegyzések:</em></p>
<p><em>A főosztály GetMethodIcon metódusának felülírásával az újonnan létrehozott ribbon gombhoz ikont is rendelhetünk.</em></p>
<p><em>A ribbon gombhoz tartozó kód létrehozhat új ablakot vagy ablakokat.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://syx.symboltech.hu/fejlesztesi-kisokos/felhasznaloi-felulet/adathoz-kotott-ribbon-gomb-letrehozasa/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Új menüpont létrehozása</title>
		<link>http://syx.symboltech.hu/fejlesztesi-kisokos/felhasznaloi-felulet/uj-menupont-letrehozasa/</link>
		<comments>http://syx.symboltech.hu/fejlesztesi-kisokos/felhasznaloi-felulet/uj-menupont-letrehozasa/#comments</comments>
		<pubDate>Sun, 21 Feb 2010 22:40:19 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Felhasználói felület]]></category>
		<category><![CDATA[menucommand]]></category>
		<category><![CDATA[menüpont]]></category>
		<category><![CDATA[metódus]]></category>

		<guid isPermaLink="false">http://syx.symboltech.hu/?p=155</guid>
		<description><![CDATA[Új menüpont létrehozásához két lépés szükséges Hozzunk létre egy tetszőleges nevű publikus metódust a főosztályban, amelynek nincs paramétere Rendeljünk hozzá egy MenuCommand attribútumot. Az attribútum első paramétere a új menüpont neve, második opcionális paraméter az új menüpont helye. A második paraméter alapértelmezett értéke MenuCommandLocation.None, amely az új menüpontot a SyX főmenübe helyezi. [MenuCommand("HelloWorld: Homokóra menüpont", MenuCommandLocation.Tools)] [...]]]></description>
			<content:encoded><![CDATA[<p>Új menüpont létrehozásához két lépés szükséges</p>
<ul>
<li>Hozzunk létre egy tetszőleges nevű publikus metódust a főosztályban, amelynek nincs paramétere</li>
<li>Rendeljünk hozzá egy MenuCommand attribútumot. Az attribútum első paramétere a új menüpont neve, második opcionális paraméter az új menüpont helye. A második paraméter alapértelmezett értéke MenuCommandLocation.None, amely az új menüpontot a SyX főmenübe helyezi.</li>
</ul>
<p>[<strong>MenuCommand</strong>("HelloWorld: Homokóra menüpont", MenuCommandLocation.Tools)]<br />
public void <strong>UseWaitCursor</strong>()<br />
{<br />
    write code here&#8230;<br />
}</p>
<p><em>Megjegyzések:</em></p>
<p><em>A főosztály GetMethodIcon metódusának felülírásával az újonnan létrehozott menüponthoz ikont is rendelhetünk.</em></p>
<p><em>Az új menüpont szerepelhet a Kedvencek menüben is.</em></p>
<p><em>A metódushoz tartozó kód létrehozhat új ablakot vagy ablakokat.</em></p>
<p><em>Amennyiben a menüpont neve sortörést tartalmaz (\n), úgy a menüpont almenü(k)ben jelenik meg.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://syx.symboltech.hu/fejlesztesi-kisokos/felhasznaloi-felulet/uj-menupont-letrehozasa/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

