¸ñÀû
FUNCTION ºí·ÏÀº Net.Data ¸ÅÅ©·Î·ÎºÎÅÍ È£ÃâµÉ ¼ö ÀÖ´Â ¼ºê·çƾÀ» Á¤ÀÇÇÕ´Ï´Ù. FUNCTION ºí·Ï³»ÀÇ ½ÇÇà°¡´É ¸í·É¹®Àº ¾ð¾î ȯ°æ¿¡¼ Á÷Á¢ ÇØ¼®µÇ´Â ¾ð¾î ¸í·É¹®À̰ųª ¿ÜºÎ ÇÁ·Î±×·¥¿¡ ´ëÇÑ È£ÃâÀ» ³ªÅ¸³¾ ¼ö ÀÖ½À´Ï´Ù.
ÇÔ¼ö Á¤ÀÇ ³»¿¡¼ EXEC ¸í·É¹®À̳ª ºí·ÏÀ» »ç¿ëÇÒ °æ¿ì, FUNCTION ºí·Ï¿¡´Â ½ÇÇà°¡´É ¸í·É¹®¸¸ÀÌ ÀÖ¾î¾ß ÇÕ´Ï´Ù. ½ÇÇà°¡´É ¸í·É¹®À» ¾ð¾î ȯ°æÀ¸·Î Àü¼ÛÇϱâ Àü¿¡, EXEC ¸í·É¹®³»ÀÇ ÇÁ·Î±×·¥ÀÇ ÆÄÀϸíÀÌ ÃʱâÈ ÆÄÀϳ»ÀÇ EXEC_PATH ±¸¼º ¸í·É¹®¿¡ ÀÇÇØ ÆÇº°µÉ °æ·Î¸í¿¡ Ãß°¡µÇ¾î¾ß ÇÕ´Ï´Ù. °á°ú ¹®ÀÚ¿Àº ½ÇÇàµÉ ¾ð¾î ȯ°æÀ¸·Î Àü¼ÛµË´Ï´Ù.
¾ð¾î ȯ°æÀÌ EXEC ¸í·É¹®À» ó¸®Çϴµ¥ »ç¿ëÇÏ´Â ¹æ¹ýÀº ƯÁ¤ ¾ð¾î ȯ°æ¿¡ µû¶ó ´Ù¸¨´Ï´Ù. REXX, System ¹× Perl ¾ð¾î ȯ°æ¿¡¼¸¸ EXEC ¸í·É¹®À» Áö¿øÇÕ´Ï´Ù.
±¸¹®
>>-%function--(--lang_env--)--function_name--| parameter definition |-->
+-;--------------------------------------------+
>--+-| returns spec |--{--| function body |---%}--+------------><
¸Å°³º¯¼ö Á¤ÀÇ
|--(--+----------------------+--)------------------------------|
| +-,--------------+ |
| V | |
+---+-------+-name--+--+
|-IN----|
|-OUT---|
+-INOUT-+
¸®ÅØ ½ºÆå
|--+----------------------+------------------------------------|
+-RETURNS--(--name--)--+
ÇÔ¼ö º»¹®
-+------------------------+----------------------------------->
| +--------------------+ |
| V | |
|--language statement--+-|
+-exec block-------------+
>--+----------------------------------+------------------------|
|-report block--+----------------+-|
| +-message block--+ |
+-message block--+---------------+-+
+-report block--+
¸Å°³º¯¼ö
ÄÁÅØ½ºÆ®
Net.Data ¸ÅÅ©·Î ¼±¾ðºÎÀÇ ºí·Ï ¹× ¸í·É¹®ÀÇ ¿ÜºÎ¿¡ ÀÖ¾î¾ß ÇÕ´Ï´Ù.
Á¦ÇÑ»çÇ×
´ÙÀ½°ú °°Àº ¿ä¼ÒµéÀ» Æ÷ÇÔÇÒ ¼ö ÀÖ½À´Ï´Ù.
¿¹
´ÙÀ½ ¿¹Á¦´Â ÀϹÝÀûÀÎ·Î½á ¸ðµç ¾ð¾î ȯ°æ¿¡ Àû¿ëµÇÁö´Â ¾Ê½À´Ï´Ù. ƯÁ¤ ¾ð¾î ȯ°æÀ» °¡Áø FUNCTION ºí·Ï »ç¿ë¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ À庸´Â Net.Data ¾ð¾î ȯ°æ ¾È³»¼¸¦ ÂüÁ¶ÇϽʽÿÀ.
¿¹Á¦ 1: REXX ºÎ¼Ó ¹®ÀÚ¿ ÇÔ¼ö.
%DEFINE lstring = "longstring"
%FUNCTION(DTW_REXX) substring(IN x, y, z) RETURNS(s) {
s = substr("$(x)", $(y), $(z));
%}
%DEFINE a = {@substring(lstring, "1", "4")%} %{ assigns "long" to a %}
a°¡ Æò°¡µÇ¸é, @substring ÇÔ¼ö È£ÃâÀÌ ¹ß°ßµÇ¸ç ºÎ¼Ó ¹®ÀÚ¿ FUNCTION ºí·ÏÀÌ ½ÇÇàµË´Ï´Ù. º¯¼ö°¡ FUNCTION ºí·Ï³»ÀÇ ½ÇÇà°¡´É ¸í·É¹®À¸·Î ´ëüµÈ ÈÄ, ¿ø¹® ¹®ÀÚ¿
s = substr("longstring", 1, 4)
°¡ REXX ÇØ¼®±â·Î Àü´ÞµÇ¾î ½ÇÇàµË´Ï´Ù. RETURNS ÀýÀÌ ÁöÁ¤µÇ¾ú±â ¶§¹®¿¡, a Æò°¡¿¡¼ @substring ÇÔ¼ö È£ÃâÀÇ °ªÀÌ sÀÇ °ªÀÎ "long"À¸·Î ´ëüµË´Ï´Ù.
¿¹Á¦ 2: ¿ÜºÎ REXX ÇÁ·Î±×·¥ÀÇ È£Ãâ.
%FUNCTION(DTW_REXX) my_rexx_pgm(INOUT a, b, IN c, OUT d) {
%EXEC{ mypgm.cmd this is a test %}
%}
%HTML(INPUT) {
<P> Original variable values: $(w) $(x) $(z)
<P> @my_rexx_pgm(w, x, y, z)
<P> Modified variable values: $(w) $(x) $(z)
%}
º¯¼ö w ¹× x´Â ÇÔ¼ö³»ÀÇ INOUT ¸Å°³º¯¼ö a¿Í b¿¡ ÇØ´çÇÕ´Ï´Ù. À̵éÀÇ °ª°ú In ¸Å°³º¯¼ö C¿¡ ÇØ´çÇÏ´Â yÀÇ °ªÀº HTML Çü½ÄÀÇ ÀÔ·ÂÀ̳ª DEFINE ¸í·É¹®À¸·ÎºÎÅÍ ÀÌ¹Ì Á¤ÀǵǾî ÀÖ¾î¾ß ÇÕ´Ï´Ù. ¸Å°³º¯¼ö a¿Í b·ÎºÎÅÍ °ªÀÌ ¸®ÅϵǸé, º¯¼ö a¿Í b¿¡´Â »õ·Î¿î °ªÀÌ ÁöÁ¤µË´Ï´Ù. OUT ¸Å°³º¯¼ö d·ÎºÎÅÍ °ªÀÌ ¸®ÅÏµÇ¸é º¯¼ö z°¡ Á¤Àǵ˴ϴÙ.
/* Sample REXX Program for ¿¹Á¦ 2 */ /* Test arguments */ num_args = arg(); say 'There are' num_args 'arguments'; do i = 1 to num_args; say 'arg' i 'is "'arg(i)'"' end; /* Set variables passed from Net.Data */ d = a || b || c; /* concatenate a, b, and c forming d */ a = ''; /* reset a to null string */ b = ''; /* reset b to null string */ return;
There are 1 arguments arg 1 is "this is a test"
EXEC ¸í·É¹®Àº REXX ¾ð¾î ȯ°æ¿¡ REXX ÇØ¼®±â°¡ ¿ÜºÎ REXX ÇÁ·Î±×·¥ÀÎ mypgm.cmd À» ½ÇÇàÇϵµ·Ï Áö½ÃÇÕ´Ï´Ù. REXX ¾ð¾î ȯ°æÀº Á÷Á¢ Net.Data º¯¼ö¿Í ÇÔ²² REXX ÇÁ·Î±×·¥À» °øÀ¯ÇÒ ¼ö Àֱ⠶§¹®¿¡, mypgm.cmd¸¦ ½ÇÇàÇϱ⿡ ¾Õ¼ REXX º¯¼ö a , b, c¿¡ Net.Data º¯¼ö w,x¹× y¸¦ ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. Mypgm.cmdÀº REXX¹®³»¿¡¼ Á÷Á¢ º¯¼ö a,b,c¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ÇÁ·Î±×·¥ÀÌ Á¾·áÇϸé, REXX º¯¼ö a,b ¹× d °¡ REXX ÇÁ·Î±×·¥¿¡¼ °Ë»öµÇ¸ç, ±× °ªÀº Net.Data º¯¼öÀÎ w,x ¹×z¿¡ ÁöÁ¤µË´Ï´Ù. RETURNS ÀýÀÌ my_rexx_pgm %FUNCTION ºí·Ï Á¤Àdz»¿¡ »ç¿ëµÇÁö ¾Ê¾Ò±â ¶§¹®¿¡, @my_rexx_pgm ÇÔ¼ö È£ÃâÀÇ °ªÀº ³Î(NULL) ¹®ÀÚ¿ ("" )ÀÌ µÇ°Å³ª( ¸®ÅÏ Äڵ尡 0ÀÎ °æ¿ì), REXX ÇÁ·Î±×·¥ ¸®ÅÏ ÄÚµåÀÇ °ªÀÌ µË´Ï´Ù(¸®ÅÏ Äڵ尡 0ÀÌ ¾Æ´Ñ °æ¿ì).
¿¹Á¦ 3: SQL Á¶È¸ ¹× º¸°í¼.
%FUNCTION(DTW_SQL) query_1(IN x, IN y) {
SELECT customer.num, order.num, part.num, status
FROM customer, order, shippingpart
WHERE customer.num = '$(x)'
AND customer.ordernumber = order.num
AND order.num = '$(y)'
AND order.partnumber = part.num
%REPORT{
<P>Here is the status of your order:
<P>$(NLIST)
<UL>
%ROW{
<LI>$(V1) $(V2) $(V3) $(V4)
%}
</UL>
%}
%}
%DEFINE customer_name="IBM"
%DEFINE customer_order="12345"
%HTML(REPORT) {
@query_1(customer_name, customer_order)
%}
@query_1 ÇÔ¼ö È£ÃâÀº SELECT ¸í·É¹®¿¡¼ $(x)´Â "IBM"À¸·Î $(y) ´Â "12345"·Î ´ëüÇÕ´Ï´Ù. SQL ÇÔ¼ö query_1ÀÇ Á¤Àǰ¡ Ãâ·Â Å×ÀÌºí º¯¼ö¸¦ ½Äº°ÇÏÁö ¸øÇϹǷΠ»ý·«½Ã Å×À̺íÀÌ »ç¿ëµË´Ï´Ù (ÀÚ¼¼ÇÑ ³»¿ëÀº TABLE º¯¼ö ºÒ·ÏÀ» ÂüÁ¶ÇϽʽÿÀ). REPORT ºí·Ï¿¡¼ ÂüÁ¶µÇ´Â NLIST ¹× Vi º¯¼ö´Â »ý·«½Ã Å×À̺í Á¤ÀÇ¿¡ ÀÇÇØ Á¤Àǵ˴ϴÙ. REPORT ºí·Ï¿¡ ÀÇÇØ ÀÛ¼ºµÈ º¸°í¼´Â query_1 ÇÔ¼ö°¡ È£ÃâµÈ Ãâ·Â HTML ¿¡ ³õÀÌ°Ô µË´Ï´Ù.
¿¹Á¦ 4: Perl ½ºÅ©¸³Æ®¸¦ ¼öÇàÇϱâ À§ÇÑ ½Ã½ºÅÛ È£Ãâ.
%FUNCTION(DTW_SYSTEM) today() RETURNS(result) {
%exec{ perl "today.prl" %}
%}
%HTML(INPUT) {
@today()
%}
$date = `date`;
chop $date;
open(DTW, "> $ENV{DTWPIPE}") || die "Could not open: $!";
print DTW "result = \"$date\"\n";
System ¾ð¾î ȯ°æÀº FUNCTION ºí·Ï³»ÀÇ ½ÇÇà°¡´É ¸í·É¹®µéÀ» C ¾ð¾î system() ÇÔ¼ö È£ÃâÀ» ÅëÇØ ¿î¿ë ½Ã½ºÅÛÀ¸·Î Àü´ÞÇÏ¿© ÇØ¼®ÇÕ´Ï´Ù. ÀÌ ¹æ¹ýÀº REXX ¾ð¾î ȯ°æ¿¡¼ ó·³ Net.Data º¯¼ö°¡ Á÷Á¢ ½ÇÇà°¡´É ¸í·É¹®À¸·Î Àü´ÞµÇ°Å³ª °Ë»öµÇ´Â °ÍÀ» Çã¿ëÇÏÁö ¾ÊÀ¸¹Ç·Î, System ¾ð¾î ȯ°æ¿¡¼´Â ´ÙÀ½¿¡ ¼³¸íÇÑ ¹æ¹ýÀ¸·Î º¯¼ö¸¦ Àü´ÞÇÏ°í °Ë»öÇÕ´Ï´Ù.
@today ÇÔ¼ö È£ÃâÀÌ ¹ß°ßµÇ¸é, Net.Data´Â ½ÇÇà°¡´É ¸í·É¹®¿¡¼ º¯¼ö ´ëü¸¦ ¼öÇàÇÕ´Ï´Ù. ÀÌ ¿¹Á¦¿¡¼´Â ½ÇÇà°¡´É ¸í·É¹®¿¡ Net.Data º¯¼ö°¡ ¾øÀ¸¹Ç·Î, ¾î¶°ÇÑ º¯¼ö ´ëüµµ ¼öÇàµÇÁö ¾Ê½À´Ï´Ù. ½ÇÇà°¡´É ¸í·É¹®°ú ¸Å°³º¯¼ö°¡ System ¾ð¾î ȯ°æÀ¸·Î Àü´ÞµÇ¸é, ¾ð¾î ȯ°æÀº ¸í¸íµÈ ÆÄÀÌÇÁ¸¦ ÀÛ¼ºÇϰí ȯ°æ º¯¼ö DTWPIPE¸¦ ÆÄÀÌÇÁ À̸§À¸·Î ¼³Á¤ÇÕ´Ï´Ù.
±×·± ´ÙÀ½, ¿ÜºÎ ÇÁ·Î±×·¥ÀÌ C system() ÇÔ¼ö È£ÃâÀ» »ç¿ëÇÏ¿© È£ÃâµË´Ï´Ù. ¿ÜºÎ ÇÁ·Î±×·¥Àº ¾²±â Àü¿ëÀ¸·Î ÆÄÀÌÇÁ¸¦ ¿¾î Ç¥ÁØ ½ºÆ®¸² ÆÄÀÏ¿¡¼ ó·³ ÆÄÀÌÇÁ¿¡ ±â·ÏÀ» ÇÕ´Ï´Ù. CGI ¸ðµå¿¡¼ Net.Data¸¦ »ç¿ëÇÒ °æ¿ì, HTML Ãâ·ÂÀº ´ë½Å STDOUT¿¡ ±â·ÏµË´Ï´Ù. ÀÌ ¿¹Á¦¿¡¼, ½Ã½ºÅÛ ³¯Â¥ ÇÁ·Î±×·¥ÀÇ Ãâ·ÂÀº FUNCTION ºí·ÏÀÇ RETURNS Àý¿¡¼ ½Äº°µÇ´Â º¯¼öÀÎ result¿¡ ÁöÁ¤µË´Ï´Ù. result º¯¼öÀÇ °ªÀº HTML ºí·Ï³»ÀÇ @today() ÇÔ¼ö È£ÃâÀ» ´ëüÇÕ´Ï´Ù.
¿¹Á¦ 5: Perl ¾ð¾î ȯ°æ.
%FUNCTION(DTW_PERL) today() RETURNS(result) {
$date = `date`;
chop $date;
open(DTW, "> $ENV{DTWPIPE}") || die "Could not open: $!";
print DTW "result = \"$date\"\n";
%}
%HTML(INPUT) {
@today()
%}
EXEC ¸í·É¹®ÀÌ »ç¿ëµÇ´Â ¹æ¹ýÀ» º¸·Á¸é ÀÌ ¿¹Á¦¸¦ ¿¹Á¦ 4¿Í ºñ±³ÇØ º¸½Ê½Ã¿À. ¿¹Á¦ 4¿¡¼, System ¾ð¾î ȯ°æÀº Perl ÇÁ·Î±×·¥À» ÇØ¼®ÇÏ´Â ¹æ¹ýÀº ¾ËÁö ¸øÇÏÁö¸¸ ¿ÜºÎ ÇÁ·Î±×·¥À» È£ÃâÇÏ´Â ¹æ¹ýÀº ¾Ë°í ÀÖ½À´Ï´Ù. EXEC ¸í·É¹®Àº perlÀ̶ó°í ÇÏ´Â ÇÁ·Î±×·¥À» ¿ÜºÎ ÇÁ·Î±×·¥À¸·Î È£ÃâÇϵµ·Ï Áö½ÃÇÕ´Ï´Ù. ½ÇÁ¦ Perl ¾ð¾î ¸í·É¹®Àº ¿ÜºÎ Perl ÇÁ·Î±×·¥¿¡ ÀÇÇØ ÇØ¼®µË´Ï´Ù. ¿¹Á¦ 5 ¿¡´Â Perl ¾ð¾î ȯ°æÀÌ Á÷Á¢ Perl ¾ð¾î ¸í·É¹®À» ÇØ¼®ÇÒ ¼ö ÀÖÀ¸¹Ç·Î EXEC ¸í·É¹®ÀÌ ¾ø½À´Ï´Ù.