<?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>Cloudscape&#039;s Blog &#187; SAP</title>
	<atom:link href="http://cloudscape.pe.kr/wp/category/sap/feed/" rel="self" type="application/rss+xml" />
	<link>http://cloudscape.pe.kr/wp</link>
	<description>Wer rastet, der rostet.</description>
	<lastBuildDate>Mon, 06 Feb 2012 10:35:05 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>TomorrowNow</title>
		<link>http://cloudscape.pe.kr/wp/tomorrownow/</link>
		<comments>http://cloudscape.pe.kr/wp/tomorrownow/#comments</comments>
		<pubDate>Fri, 26 Nov 2010 13:51:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[SAP]]></category>
		<category><![CDATA[TomorrowNow]]></category>

		<guid isPermaLink="false">http://cloudscape.pe.kr/wp/?p=1301</guid>
		<description><![CDATA[TomorrowNow 판결이 난 지도 이틀이 지났는데 상대적으로 조용하다. 금액이 워낙 황당해서 &#8211; $1.3B, 즉 1조 5천억원 &#8211; 아무래도 여파가 길 줄 알았는데, 직원들에게 부담은 없을 것이라는 사내메일을 빠르게 보내는 등 조기에 수습하려는 듯. (하긴 SAP 한 회사의 revenue만도 전 세계 GDP rank(nominal) 중간을 간다) 이슈 자체가 X팔리는 것이라 그럴 수도 있겠다. 하지만 래리의 대응을 보면 [...]]]></description>
			<content:encoded><![CDATA[<p>TomorrowNow 판결이 난 지도 이틀이 지났는데 상대적으로 조용하다.<br />
금액이 워낙 황당해서 &#8211; $1.3B, 즉 1조 5천억원 &#8211; 아무래도 여파가 길 줄 알았는데, 직원들에게 부담은 없을 것이라는 사내메일을 빠르게 보내는 등 조기에 수습하려는 듯. (하긴 SAP 한 회사의 revenue만도 전 세계 GDP rank(nominal) 중간을 간다)</p>
<p>이슈 자체가 X팔리는 것이라 그럴 수도 있겠다. 하지만 래리의 대응을 보면 피해자라기보다 끊임없이 적만 양산하는 듯 하다. 별로 더 나아보이진 않는다. 쯧쯧.</p>
]]></content:encoded>
			<wfw:commentRss>http://cloudscape.pe.kr/wp/tomorrownow/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Event handing in ABAP Object</title>
		<link>http://cloudscape.pe.kr/wp/event-handing-in-abap-object/</link>
		<comments>http://cloudscape.pe.kr/wp/event-handing-in-abap-object/#comments</comments>
		<pubDate>Thu, 16 Sep 2010 11:59:57 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[SAP]]></category>
		<category><![CDATA[ABAP]]></category>
		<category><![CDATA[Event handling]]></category>

		<guid isPermaLink="false">http://cloudscape.pe.kr/wp/?p=1134</guid>
		<description><![CDATA[아래는 SAP Help에서 가져온 예제이다. *&#038;---------------------------------------------------------------------* *&#038; Report ZP_DEMO_CLASS_CNT_EVENT *&#038;---------------------------------------------------------------------* REPORT zp_demo_class_cnt_event. *----------------------------------------------------------------------* * CLASS counter DEFINITION *----------------------------------------------------------------------* CLASS counter DEFINITION. PUBLIC SECTION. METHODS increment_counter. EVENTS critical_value EXPORTING value(excess) TYPE i. PRIVATE SECTION. DATA: count TYPE i, threshold TYPE i VALUE 10. ENDCLASS. "counter DEFINITION *----------------------------------------------------------------------* * CLASS counter IMPLEMENTATION *----------------------------------------------------------------------* CLASS counter IMPLEMENTATION. METHOD [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://help.sap.com/saphelp_nw70/helpdata/en/71/a8a77955bc11d194aa0000e8353423/frameset.htm">아래는 SAP Help에서 가져온 예제</a>이다.</p>
<pre class="brush: plain; collapse: true;">
*&#038;---------------------------------------------------------------------*
*&#038; Report  ZP_DEMO_CLASS_CNT_EVENT
*&#038;---------------------------------------------------------------------*

REPORT  zp_demo_class_cnt_event.

*----------------------------------------------------------------------*
*       CLASS counter DEFINITION
*----------------------------------------------------------------------*
CLASS counter DEFINITION.
  PUBLIC SECTION.
    METHODS increment_counter.
    EVENTS  critical_value EXPORTING value(excess) TYPE i.
  PRIVATE SECTION.
    DATA: count     TYPE i,
          threshold TYPE i VALUE 10.
ENDCLASS.                    "counter DEFINITION

*----------------------------------------------------------------------*
*       CLASS counter IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS counter IMPLEMENTATION.
  METHOD increment_counter.
    DATA diff TYPE i.
    ADD 1 TO count.
    IF count > threshold.
      diff = count - threshold.
      RAISE EVENT critical_value EXPORTING excess = diff.
    ENDIF.
  ENDMETHOD.                    "increment_counter
ENDCLASS.                    "counter IMPLEMENTATION

*----------------------------------------------------------------------*
*       CLASS handler DEFINITION
*----------------------------------------------------------------------*
CLASS handler DEFINITION.
  PUBLIC SECTION.
    METHODS handle_excess
            FOR EVENT critical_value OF counter
            IMPORTING excess.
ENDCLASS.                    "handler DEFINITION

*----------------------------------------------------------------------*
*       CLASS handler IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS handler IMPLEMENTATION.
  METHOD handle_excess.
    WRITE: / 'Excess is', excess.
  ENDMETHOD.                    "handle_excess
ENDCLASS.                    "handler IMPLEMENTATION

DATA: r1 TYPE REF TO counter,
      h1 TYPE REF TO handler.

START-OF-SELECTION.

  CREATE OBJECT: r1, h1.

  SET HANDLER h1->handle_excess FOR ALL INSTANCES.

  DO 20 TIMES.
    CALL METHOD r1->increment_counter.
  ENDDO.
</pre>
<p>정리하면, 3가지 역할이 필요하다. 즉, 1) Event를 등록하고 2) Event를 발생(Raise)하고 3) 발생된 Event를 handling 하는 것. 여기서는 &#8216;Event Trigger&#8217; 클래스에서 1)과 2)를, &#8216;Event Handler&#8217; 클래스에서 3)을 처리하는 방식을 취하고 있다.</p>
<p>구체적으로 보면,</p>
<ul>
<li>SET HANDLER 구문은 handler table를 만든다. 이 테이블은 ① handler methods의 이름과 ② 그 handler를 갖고 있는 클래스 인스턴스의 reference로 구성되어있다.</li>
<li>상기 클래스 인스턴스는 초기화 되더라도 garbage collection 대상이 되지 않는다. Handler table에 등록되어 떡 버티고 있기 때문이다.</li>
<li><strong>For static events, the system creates an instance-independent handler table for the relevant class.</strong></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://cloudscape.pe.kr/wp/event-handing-in-abap-object/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Package example in ABAP, 두번째</title>
		<link>http://cloudscape.pe.kr/wp/package-example-in-abap-%eb%91%90%eb%b2%88%ec%a7%b8/</link>
		<comments>http://cloudscape.pe.kr/wp/package-example-in-abap-%eb%91%90%eb%b2%88%ec%a7%b8/#comments</comments>
		<pubDate>Thu, 10 Jun 2010 18:24:59 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[SAP]]></category>
		<category><![CDATA[ABAP]]></category>
		<category><![CDATA[Package]]></category>

		<guid isPermaLink="false">http://cloudscape.pe.kr/wp/?p=994</guid>
		<description><![CDATA[지난 번과는 반대로, subpackage가 superpackage의 object를 억세스하려 할 경우를 생각해보자. SE80 open. 먼저 subpackage와 superpackage 양쪽에 Package Interface가 있나 확인해보자. 없으면 만들자. superpackage의 Package Interface를 더블 클릭. 두 개의 탭이 나오는데 &#8216;Exposed Objects&#8217;를 클릭, 노출할 object를 추가한다. (드래그 앤 드롭으로 쉽게 된다) 다음에 바로 옆의 탭인 &#8216;Attributes&#8217; 클릭. 하단에 &#8216;Visible for subpackages&#8217;에 체크한다. subpackage 이름을 [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://cloudscape.pe.kr/wp/package-example-in-abap/">지난 번</a>과는 반대로, subpackage가 superpackage의 object를 억세스하려 할 경우를 생각해보자.</p>
<p><img src="http://cloudscape.pe.kr/wp/wp-content/uploads/2010/06/20100610_package_inf_1.png" alt="20100610_package_inf_1" title="20100610_package_inf_1" width="350" height="426" class="alignnone size-full wp-image-1000" /></p>
<ol>
<li>SE80 open.</li>
<li>먼저 subpackage와 superpackage 양쪽에 Package Interface가 있나 확인해보자. 없으면 만들자.</li>
<li>superpackage의 Package Interface를 더블 클릭. 두 개의 탭이 나오는데 &#8216;Exposed Objects&#8217;를 클릭, 노출할 object를 추가한다. (드래그 앤 드롭으로 쉽게 된다)</li>
<p><img src="http://cloudscape.pe.kr/wp/wp-content/uploads/2010/06/20100610_package_inf_2.png" alt="20100610_package_inf_2" title="20100610_package_inf_2" width="550" height="397" class="alignnone size-full wp-image-1001" /></p>
<li>다음에 바로 옆의 탭인 &#8216;Attributes&#8217; 클릭. 하단에 &#8216;Visible for subpackages&#8217;에 체크한다.</li>
<li>subpackage 이름을 더블 클릭, &#8216;Dependency Control List&#8217; 탭을 연다. Add 버튼을 누르고 superpackage의 Package Interface를 추가한다.</li>
<p><img src="http://cloudscape.pe.kr/wp/wp-content/uploads/2010/06/20100610_package_inf_3.png" alt="20100610_package_inf_3" title="20100610_package_inf_3" width="550" height="371" class="alignnone size-full wp-image-1002" /></p>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://cloudscape.pe.kr/wp/package-example-in-abap-%eb%91%90%eb%b2%88%ec%a7%b8/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Iterator Pattern (in ABAP)</title>
		<link>http://cloudscape.pe.kr/wp/the-iterator-pattern-in-abap/</link>
		<comments>http://cloudscape.pe.kr/wp/the-iterator-pattern-in-abap/#comments</comments>
		<pubDate>Sun, 06 Jun 2010 20:39:14 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[SAP]]></category>
		<category><![CDATA[ABAP]]></category>
		<category><![CDATA[Design Pattern]]></category>
		<category><![CDATA[Iterator]]></category>
		<category><![CDATA[Pattern]]></category>

		<guid isPermaLink="false">http://cloudscape.pe.kr/wp/?p=979</guid>
		<description><![CDATA[Iterator를 사용해서 구현과는 분리하여 하나 하나 요소들을 셀 수 있다. 아래 소스를 보면 loop를 돌 때 Iterator의 메소드만 이용하고 있으며 Aggregate 클래스가 어떤 식으로 구현되어 있는가 &#8211; 배열이든, 벡터든, Internal Table이든 &#8211; 는 상관없다. 즉 나중에 Aggregate의 요소 관리 방식을 얼마든지 바꿀 수 있다는 이야기. 이를 위해 아래와 같은 것들이 필요하다. Iterator 인터페이스. Aggregate 인터페이스. [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-980" title="20100606_iterator" src="http://cloudscape.pe.kr/wp/wp-content/uploads/2010/06/20100606_iterator.png" alt="20100606_iterator" width="586" height="327" /></p>
<p>Iterator를 사용해서 구현과는 분리하여 하나 하나 요소들을 셀 수 있다.<br />
아래 소스를 보면 loop를 돌 때 Iterator의 메소드만 이용하고 있으며 Aggregate 클래스가 어떤 식으로 구현되어 있는가 &#8211; 배열이든, 벡터든, Internal Table이든 &#8211; 는 상관없다. 즉 나중에 Aggregate의 요소 관리 방식을 얼마든지 바꿀 수 있다는 이야기.<br />
이를 위해 아래와 같은 것들이 필요하다.</p>
<ul>
<li>Iterator 인터페이스.</li>
<li>Aggregate 인터페이스.  Iterator 인터페이스 타입의 객체를 리턴하는 메소드를 제공.</li>
<li>ConcreteIterator. Iterator 인터페이스를 구현한다. 구체적으로 어떤 놈을 어떻게 돌아야하는지 알고 있어야 하기 때문에 ConcreteAggregate의 객체를 내부에 가지고 있다.</li>
<li>ConcreteAggregate. Aggregate 인터페이스를 구현한다. 자신을 인자로 넘겨주면서 ConcreteIterator를 생성한다.</li>
</ul>
<p>헷갈리기 쉬운게 Next()와 hasNext()인데,</p>
<ul>
<li>Next() 호출시 현재 요소를 리턴하면서 내부적으로 다음 위치로 이동하게 된다.</li>
<li>hasNext()는 최후의 요소를 얻기 전에는 true를 리턴하고 최후의 요소를 얻은 후에는 false를 리턴한다. 다음에 Next()를 호출해도 괜찮은지 조사하는 메소드로 이해하면 된다.</li>
</ul>
<p>아래는 해당 소스.</p>
<pre class="brush: plain; collapse: true;">

*&#038;---------------------------------------------------------------------*
*&#038; Report  ZP_ITERATOR
*&#038;
*&#038;---------------------------------------------------------------------*
*&#038;
*&#038;
*&#038;---------------------------------------------------------------------*

REPORT  zp_iterator.

*PARAMETERS:

*----------------------------------------------------------------------*
*       INTERFACE lif_iterator
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
INTERFACE lif_iterator.
  TYPE-POOLS abap.

  METHODS: has_next RETURNING value(r_flag) TYPE abap_bool,
           next RETURNING VALUE(r_obj) TYPE REF TO object.

ENDINTERFACE.                    "lif_iterator

*----------------------------------------------------------------------*
*       INTERFACE lif_aggregate
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
INTERFACE lif_aggregate.

  METHODS iterator RETURNING VALUE(r_it) TYPE REF TO lif_iterator.

ENDINTERFACE.                    "lif_aggregate

*----------------------------------------------------------------------*
*       CLASS lcl_book DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_book DEFINITION.

  PUBLIC SECTION.
    METHODS: constructor IMPORTING i_name TYPE string,
             get_name RETURNING value(r_name) TYPE string.

  PRIVATE SECTION.
    DATA m_name TYPE string.

ENDCLASS.                    "lcl_book DEFINITION

*----------------------------------------------------------------------*
*       CLASS lcl_bookshelf DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_bookshelf DEFINITION.

  PUBLIC SECTION.
    INTERFACES lif_aggregate.
    METHODS: get_book_at IMPORTING i_idx TYPE i
                         RETURNING VALUE(r_book) TYPE REF TO lcl_book,
             append_book IMPORTING i_book TYPE REF TO lcl_book,
             get_length RETURNING value(r_last) TYPE i.

  PRIVATE SECTION.
    DATA: m_books TYPE STANDARD TABLE OF REF TO lcl_book,
          m_last TYPE i.

ENDCLASS.                    "lcl_bookshelf DEFINITION

*----------------------------------------------------------------------*
*       CLASS lcl_bookshelf_it DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_bookshelf_it DEFINITION.

  PUBLIC SECTION.
    INTERFACES lif_iterator.
    METHODS constructor IMPORTING i_bookshelf TYPE REF TO lcl_bookshelf.

  PRIVATE SECTION.
    DATA: m_bookshelf TYPE REF TO lcl_bookshelf,
          m_idx TYPE i VALUE 1.

ENDCLASS.                    "lcl_bookshelf_it DEFINITION

*----------------------------------------------------------------------*
*       CLASS lcl_book IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_book IMPLEMENTATION.

  METHOD constructor.
    m_name = i_name.
  ENDMETHOD.                    "constructor

  METHOD get_name.
    r_name = m_name.
  ENDMETHOD.                    "get_name

ENDCLASS.                    "lcl_book IMPLEMENTATION

*----------------------------------------------------------------------*
*       CLASS lcl_bookshelf IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_bookshelf IMPLEMENTATION.

  METHOD get_book_at.
    READ TABLE m_books INDEX i_idx INTO r_book.
  ENDMETHOD.                    "get_book_at

  METHOD append_book.
    APPEND i_book TO m_books.
  ENDMETHOD.                    "append_book

  METHOD get_length.
    r_last = lines( m_books ).
  ENDMETHOD.                    "get_length

  METHOD lif_aggregate~iterator.
    CREATE OBJECT r_it TYPE lcl_bookshelf_it EXPORTING i_bookshelf = me.
  ENDMETHOD.                    "lif_aggregate~iterator

ENDCLASS.                    "lcl_bookshelf IMPLEMENTATION

*----------------------------------------------------------------------*
*       CLASS lcl_bookshelf_it IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_bookshelf_it IMPLEMENTATION.

  METHOD constructor.
    m_bookshelf = i_bookshelf.
  ENDMETHOD.                    "constructor

  METHOD lif_iterator~has_next.
    IF m_idx <= m_bookshelf->get_length( ).
      r_flag = abap_true.
    ELSE.
      r_flag = abap_false.
    ENDIF.
  ENDMETHOD.                    "lif_iterator~has_next

  METHOD lif_iterator~next.
    r_obj = m_bookshelf->get_book_at( m_idx ).
    ADD 1 TO m_idx.
  ENDMETHOD.                    "lif_iterator~next

ENDCLASS.                    "lcl_bookshelf_it IMPLEMENTATION

*----------------------------------------------------------------------*
*       CLASS demo DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS demo DEFINITION.

  PUBLIC SECTION.
    CLASS-METHODS: main.

ENDCLASS.                    "demo DEFINITION

*----------------------------------------------------------------------*
*       CLASS demo IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS demo IMPLEMENTATION.

  METHOD main.
    DATA: lr_bookshelf TYPE REF TO lcl_bookshelf,
          lr_book_1 TYPE REF TO lcl_book,
          lr_book_2 TYPE REF TO lcl_book,
          lr_book_3 TYPE REF TO lcl_book,
          lr_book_4 TYPE REF TO lcl_book,
          lr_book_5 TYPE REF TO lcl_book,
          lr_it TYPE REF TO lif_iterator,
          lr_book TYPE REF TO lcl_book,
          lv_str TYPE string.

    CREATE OBJECT: lr_bookshelf,
                   lr_book_1 EXPORTING i_name = 'Around the world in 80 days',
                   lr_book_2 EXPORTING i_name = 'Bible',
                   lr_book_3 EXPORTING i_name = 'The Lord of the Rings',
                   lr_book_4 EXPORTING i_name = 'Jonathan Livingston Seagull',
                   lr_book_5 EXPORTING i_name = 'The Keys of the Kingdom'.

    lr_bookshelf->append_book( lr_book_1 ).
    lr_bookshelf->append_book( lr_book_2 ).
    lr_bookshelf->append_book( lr_book_3 ).
    lr_bookshelf->append_book( lr_book_4 ).
    lr_bookshelf->append_book( lr_book_5 ).

    lr_it = lr_bookshelf->lif_aggregate~iterator( ).

    WHILE lr_it->has_next( ) = abap_true.
      lr_book ?= lr_it->next( ).
      lv_str = lr_book->get_name( ).
      WRITE: / lv_str.
    ENDWHILE.
  ENDMETHOD.                    "main

ENDCLASS.                    "demo IMPLEMENTATION

START-OF-SELECTION.
  demo=>main( ).
</pre>
]]></content:encoded>
			<wfw:commentRss>http://cloudscape.pe.kr/wp/the-iterator-pattern-in-abap/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Defining Exception Classes</title>
		<link>http://cloudscape.pe.kr/wp/defining-exception-classes/</link>
		<comments>http://cloudscape.pe.kr/wp/defining-exception-classes/#comments</comments>
		<pubDate>Fri, 28 May 2010 13:58:18 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[SAP]]></category>
		<category><![CDATA[ABAP]]></category>

		<guid isPermaLink="false">http://cloudscape.pe.kr/wp/?p=968</guid>
		<description><![CDATA[모든 exception class는 아래 3가지 class들 중 하나의 subclass가 되어야 한다. 이 3개의 class들은 CX_ROOT로부터 파생된 것이지만, 내가 직접 CX_ROOT로부터 파생된 class를 만들어 사용할 수는 없다. CX_STATIC_CHECK CX_DYNAMIC_CHECK CX_NO_CHECK 언제 어떤 것을 사용하느냐 &#8211; 를 생각해보자. 약간씩 틀리긴 하다. Subclasses of CX_STATIC_CHECK The relevant exception must either be handled, or propagated explicitly using the RAISING [...]]]></description>
			<content:encoded><![CDATA[<p>모든 exception class는 아래 3가지 class들 중 하나의 subclass가 되어야 한다. 이 3개의 class들은 CX_ROOT로부터 파생된 것이지만, 내가 직접 CX_ROOT로부터 파생된 class를 만들어 사용할 수는 없다.</p>
<ul>
<li>CX_STATIC_CHECK</li>
<li>CX_DYNAMIC_CHECK</li>
<li>CX_NO_CHECK</li>
</ul>
<p>언제 어떤 것을 사용하느냐 &#8211; 를 생각해보자. 약간씩 틀리긴 하다.</p>
<p><img src="http://cloudscape.pe.kr/wp/wp-content/uploads/2010/05/20100528_exception.png" alt="20100528_exception" title="20100528_exception" width="500" height="351" class="alignnone size-full wp-image-972" /></p>
<p><strong>Subclasses of CX_STATIC_CHECK</strong><br />
The relevant exception must either be handled, or propagated explicitly using the RAISING addition. If this is not the case, the syntax check displays a warning.<br />
<span style="color: #ff0000;"> If you define your own exception classes, CX_STATIC_CHECK is defined as the superclass by default.</span></p>
<p><strong>Subclasses of CX_DYNAMIC_CHECK</strong><br />
You must either handle them or explicitly propagate them using the RAISING addition. The difference is that this is not statically checked. No syntax warning is reported if the exception is neither handled nor propagated. If the exception is then raised, a runtime error occurs.<br />
Typical examples of this situation are the predefined exceptions CX_SY_&#8230; for errors that occur in the runtime environment. These are usually subclasses of CX_DYNAMIC_CHECK.</p>
<p><strong>Subclasses of CX_NO_CHECK</strong><br />
The corresponding exceptions cannot be propagated explicitly using the RAISING addition. <span style="color: #ff0000;">These exceptions can be handled. Otherwise they are automatically propagated.</span> Neither a syntax warning nor a runtime error is caused directly where it is raised. Instead all exceptions that are not handled somewhere in the call hierarchy are propagated up to the highest call level. If it is not caught there either, a runtime error occurs at that point.<br />
Some predefined exceptions with the prefix CX_SY_&#8230; for error situations in the runtime environment are subclasses of CX_NO_CHECK.</p>
<p><a href="http://help.sap.com/saphelp_470/helpdata/en/83/636d1d12fc11d5991e00508b5d5211/content.htm">여기를 참고하도록.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://cloudscape.pe.kr/wp/defining-exception-classes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Factory Method Pattern (in ABAP)</title>
		<link>http://cloudscape.pe.kr/wp/the-factory-method-pattern-in-abap/</link>
		<comments>http://cloudscape.pe.kr/wp/the-factory-method-pattern-in-abap/#comments</comments>
		<pubDate>Wed, 12 May 2010 14:12:57 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[SAP]]></category>
		<category><![CDATA[ABAP]]></category>
		<category><![CDATA[Design Pattern]]></category>
		<category><![CDATA[Factory Method]]></category>
		<category><![CDATA[Pattern]]></category>

		<guid isPermaLink="false">http://cloudscape.pe.kr/wp/?p=857</guid>
		<description><![CDATA[Factory의 요점은 다음과 같다. &#8216;Product를 만드는 것&#8217;과 &#8216;등록&#8217;의 구현은 하위 클래스에서 수행한다. (new를 사용해서) 실제의 인스턴스를 생성하는 대신에 인스턴스 생성을 위한 메소드를 호출함으로서(create_product) 구체적인 클래스명에 의한 속박에서 벗어나고 있다. Framework 쪽: ZCL_FACTORY class ZCL_FACTORY definition public abstract create public . public section. *"* public components of class ZCL_FACTORY *"* do not include other source files [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://cloudscape.pe.kr/wp/wp-content/uploads/2010/05/20100512_factory_method.png" alt="20100512_factory_method" title="20100512_factory_method" width="450" height="353" class="alignnone size-full wp-image-863" /><br />
Factory의 요점은 다음과 같다.</p>
<ul>
<li>&#8216;Product를 만드는 것&#8217;과 &#8216;등록&#8217;의 구현은 하위 클래스에서 수행한다.</li>
<li>(new를 사용해서) 실제의 인스턴스를 생성하는 대신에 인스턴스 생성을 위한 메소드를 호출함으로서(create_product) 구체적인 클래스명에 의한 속박에서 벗어나고 있다.</li>
</ul>
<p><strong>Framework 쪽: ZCL_FACTORY</strong></p>
<pre class="brush: plain; collapse: true;">
class ZCL_FACTORY definition
  public
  abstract
  create public .

public section.
*"* public components of class ZCL_FACTORY
*"* do not include other source files here!!!

  methods CREATE
  final
    importing
      !I_OWNER type STRING
    returning
      value(R_PRODUCT) type ref to ZCL_PRODUCT .
protected section.
*"* protected components of class ZCL_FACTORY
*"* do not include other source files here!!!

  methods CREATE_PRODUCT
  abstract
    importing
      !I_OWNER type STRING
    returning
      value(R_PRODUCT) type ref to ZCL_PRODUCT .
  methods REGISTER_PRODUCT
  abstract
    importing
      !I_PRODUCT type ref to ZCL_PRODUCT .
private section.
*"* private components of class ZCL_FACTORY
*"* do not include other source files here!!!
ENDCLASS.

CLASS ZCL_FACTORY IMPLEMENTATION.

* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_FACTORY->CREATE
* +-------------------------------------------------------------------------------------------------+
* | [--->] I_OWNER                        TYPE        STRING
* | [<-()] R_PRODUCT                      TYPE REF TO ZCL_PRODUCT
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD create.
  r_product = create_product( i_owner ).
  register_product( r_product ).
ENDMETHOD.
ENDCLASS.
</pre>
<p><strong>Framework 쪽: ZCL_PRODUCT</strong></p>
<pre class="brush: plain; collapse: true;">
class ZCL_PRODUCT definition
  public
  abstract
  create public .

public section.
*"* public components of class ZCL_PRODUCT
*"* do not include other source files here!!!

  methods USE
  abstract .
protected section.
*"* protected components of class ZCL_PRODUCT
*"* do not include other source files here!!!
private section.
*"* private components of class ZCL_PRODUCT
*"* do not include other source files here!!!
ENDCLASS.

CLASS ZCL_PRODUCT IMPLEMENTATION.
ENDCLASS.
</pre>
<p><strong>ZCL_IDCARD_FACTORY</strong></p>
<pre class="brush: plain; collapse: true;">
class ZCL_IDCARD_FACTORY definition
  public
  inheriting from ZCL_FACTORY
  create public .

public section.
*"* public components of class ZCL_IDCARD_FACTORY
*"* do not include other source files here!!!

  types:
    GTY_PRODUCT type STANDARD TABLE OF ref to ZCL_PRODUCT .

  methods GET_OWNERS
    exporting
      value(R_OWNERS) type GTY_PRODUCT .
protected section.
*"* protected components of class ZCL_IDCARD_FACTORY
*"* do not include other source files here!!!

  methods CREATE_PRODUCT
    redefinition .
  methods REGISTER_PRODUCT
    redefinition .
private section.
*"* private components of class ZCL_IDCARD_FACTORY
*"* do not include other source files here!!!

  data:
    M_OWNERS TYPE gty_product .
ENDCLASS.

CLASS ZCL_IDCARD_FACTORY IMPLEMENTATION.

* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Protected Method ZCL_IDCARD_FACTORY->CREATE_PRODUCT
* +-------------------------------------------------------------------------------------------------+
* | [--->] I_OWNER                        TYPE        STRING
* | [<-()] R_PRODUCT                      TYPE REF TO ZCL_PRODUCT
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD create_product.
  CREATE OBJECT r_product TYPE zcl_idcard
    EXPORTING
      i_owner = i_owner.
ENDMETHOD.

* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_IDCARD_FACTORY->GET_OWNERS
* +-------------------------------------------------------------------------------------------------+
* | [<---] R_OWNERS                       TYPE        GTY_PRODUCT
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD get_owners.
  r_owners = m_owners.
ENDMETHOD.

* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Protected Method ZCL_IDCARD_FACTORY->REGISTER_PRODUCT
* +-------------------------------------------------------------------------------------------------+
* | [--->] I_PRODUCT                      TYPE REF TO ZCL_PRODUCT
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD register_product.
  APPEND i_product TO m_owners.
ENDMETHOD.
ENDCLASS.
</pre>
<p><strong>ZCL_IDCARD</strong></p>
<pre class="brush: plain; collapse: true;">
class ZCL_IDCARD definition
  public
  inheriting from ZCL_PRODUCT
  create public .

public section.
*"* public components of class ZCL_IDCARD
*"* do not include other source files here!!!

  methods CONSTRUCTOR
    importing
      value(I_OWNER) type STRING .
  methods GET_OWNER
    returning
      value(R_OWNER) type STRING .

  methods USE
    redefinition .
protected section.
*"* protected components of class ZCL_IDCARD
*"* do not include other source files here!!!
private section.
*"* private components of class ZCL_IDCARD
*"* do not include other source files here!!!

  data M_OWNER type STRING .
ENDCLASS.

CLASS ZCL_IDCARD IMPLEMENTATION.

* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_IDCARD->CONSTRUCTOR
* +-------------------------------------------------------------------------------------------------+
* | [--->] I_OWNER                        TYPE        STRING
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD constructor.
  super->constructor( ).
  WRITE: / i_owner, '''s Card created.'.
  m_owner = i_owner.
ENDMETHOD.

* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_IDCARD->GET_OWNER
* +-------------------------------------------------------------------------------------------------+
* | [<-()] R_OWNER                        TYPE        STRING
* +--------------------------------------------------------------------------------------</SIGNATURE>
method GET_OWNER.
endmethod.

* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_IDCARD->USE
* +-------------------------------------------------------------------------------------------------+
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD use.
  WRITE: / m_owner, '''s Card is being used now.'.
ENDMETHOD.
ENDCLASS.
</pre>
<p><strong>그리고&#8230; 실행 프로그램 ZP_FACTORY_METHOD</strong></p>
<pre class="brush: plain; collapse: true;">
*&#038;---------------------------------------------------------------------*
*&#038; Report  ZP_FACTORY_METHOD
*&#038;
*&#038;---------------------------------------------------------------------*
*&#038;
*&#038;
*&#038;---------------------------------------------------------------------*

REPORT  zp_factory_method.

*PARAMETERS:

CLASS demo DEFINITION.

  PUBLIC SECTION.
    CLASS-METHODS: main.

ENDCLASS.                    "demo DEFINITION

*----------------------------------------------------------------------*
*       CLASS demo IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS demo IMPLEMENTATION.

  METHOD main.
    DATA: lr_factory TYPE REF TO zcl_factory,
          lr_product_1 TYPE REF TO zcl_product,
          lr_product_2 TYPE REF TO zcl_product,
          lr_product_3 TYPE REF TO zcl_product.

    CREATE OBJECT lr_factory TYPE zcl_idcard_factory.

    lr_product_1 = lr_factory->create( i_owner = 'CHON' ).
    lr_product_2 = lr_factory->create( i_owner = 'LOVEHOLICS' ).
    lr_product_3 = lr_factory->create( i_owner = 'A-HA' ).

    SKIP 2.

    lr_product_1->use( ).
    lr_product_2->use( ).
    lr_product_3->use( ).
  ENDMETHOD.                    "main

ENDCLASS.                    "demo IMPLEMENTATION

START-OF-SELECTION.
  demo=>main( ).
</pre>
<p>이 실행 프로그램은 철저하게 암기할 필요가 있겠다.</p>
]]></content:encoded>
			<wfw:commentRss>http://cloudscape.pe.kr/wp/the-factory-method-pattern-in-abap/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Package example in ABAP</title>
		<link>http://cloudscape.pe.kr/wp/package-example-in-abap/</link>
		<comments>http://cloudscape.pe.kr/wp/package-example-in-abap/#comments</comments>
		<pubDate>Wed, 12 May 2010 12:43:20 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[SAP]]></category>
		<category><![CDATA[ABAP]]></category>
		<category><![CDATA[Package]]></category>

		<guid isPermaLink="false">http://cloudscape.pe.kr/wp/?p=738</guid>
		<description><![CDATA[먼저 TEST_FRAMEWORK.ZCL_PRODUCT를 상속받는 TEST_IDCARD.ZCL_IDCARD를 컴파일하면 서로 다른 Package로 인한 경고를 받게 된다. 일단 TEST_IDCARD의 억세스를 가능하게 하기 위해 TEST_FRAMEWORK 쪽에서 인터페이스를 만들어주어야 한다. ZPIF_TEST_FRAMEWORK란 Package Interface를 만들어주고 대외적으로 오픈할 object &#8211; 여기서는 ZCL_PRODUCT와 ZCL_FACTORY &#8211; 를 추가해준다. 이때 Derive subclasses 부분도 &#8216;Allow Usage&#8217; 체크를 해주어야 한다. TEST_IDCARD의 DCL(Dependency Control List)를 연다. (SE80로 가서 해당 class를 [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://cloudscape.pe.kr/wp/wp-content/uploads/2010/05/20100512_package_1.png" alt="20100512_package_1" title="20100512_package_1" width="399" height="399" class="alignnone size-full wp-image-852" /><br />
먼저 TEST_FRAMEWORK.ZCL_PRODUCT를 상속받는 TEST_IDCARD.ZCL_IDCARD를 컴파일하면 서로 다른 Package로 인한 경고를 받게 된다.</p>
<ol>
<li>일단 TEST_IDCARD의 억세스를 가능하게 하기 위해 TEST_FRAMEWORK 쪽에서 인터페이스를 만들어주어야 한다.<br />
ZPIF_TEST_FRAMEWORK란 Package Interface를 만들어주고 대외적으로 오픈할 object &#8211; 여기서는 ZCL_PRODUCT와 ZCL_FACTORY &#8211; 를 추가해준다.</li>
<li>이때 Derive subclasses 부분도 &#8216;Allow Usage&#8217; 체크를 해주어야 한다.</li>
<p><img src="http://cloudscape.pe.kr/wp/wp-content/uploads/2010/05/20100512_package_2.png" alt="20100512_package_2" title="20100512_package_2" width="590" height="425" class="alignnone size-full wp-image-853" /></p>
<li>TEST_IDCARD의 DCL(Dependency Control List)를 연다. (SE80로 가서 해당 class를 더블클릭하면 관련 탭이 보인다) 여기에 앞서 생성한 Package Interface를 추가한다.</li>
</ol>
<p>다음으로, TEST_FRAMEWORK와 TEST_IDCARD의 상위 Package인 TEST_FACTORY_PATTERN 아래의 리포트 ZP_FACTORY_METHOD가 하위 Package들의 object를 억세스하게 하기 위해 아래와 같은 조치가 필요하다.</p>
<ol>
<li>ZPIF_TEST_FACTORY_METHOD라는 상위 Package의 Package Interface를 만든다. 여기에는 아무 것도 추가할 필요 없다. (어쨌건 인터페이스는 필요하다)</li>
<li>앞서 TEST_FRAMEWORK의 경우와 같이 TEST_IDCARD에서도 외부 억세스를 위한 인터페이스를 만들어야 한다.<br />
이 Package에 속한 ZCL_IDCARD와 ZCL_IDCARD_FACTORY를 인터페이스에 추가하면 자동적으로 그 부모 class의 object도 추가가 된다.</li>
</ol>
<p><img src="http://cloudscape.pe.kr/wp/wp-content/uploads/2010/05/20100512_package_3.png" alt="20100512_package_3" title="20100512_package_3" width="631" height="246" class="alignnone size-full wp-image-854" /></p>
<p>여기까지.<br />
써놓고 보니 어지러워보이긴 하지만 개념 자체는 단순하다. 그래도 Java의 Package 컨셉이 훨씬 깔끔한 건 사실이다.</p>
]]></content:encoded>
			<wfw:commentRss>http://cloudscape.pe.kr/wp/package-example-in-abap/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The Adapter Pattern (in ABAP)</title>
		<link>http://cloudscape.pe.kr/wp/the-adapter-pattern-in-abap/</link>
		<comments>http://cloudscape.pe.kr/wp/the-adapter-pattern-in-abap/#comments</comments>
		<pubDate>Tue, 04 May 2010 18:12:27 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[SAP]]></category>
		<category><![CDATA[ABAP]]></category>
		<category><![CDATA[Adapter]]></category>
		<category><![CDATA[Design Pattern]]></category>
		<category><![CDATA[HFDP]]></category>
		<category><![CDATA[Pattern]]></category>

		<guid isPermaLink="false">http://cloudscape.pe.kr/wp/?p=713</guid>
		<description><![CDATA[(HFDP에서) Duck의 object가 부족해서 Turkey의 object를 이용하려고 한다&#8230; 라는 이상한 상황을 가정하고 있다. 보통 기존 모듈이 새로운 모듈을 이용하려고 하나 서로 interface가 맞지 않을때 &#8211; 구체적으로, 한 클라이언트가 다른 object의 method를 이용하고 싶지만 기존 보유한 method를 바꾸고 싶진 않다(또는 바꿀 수 없다) 할 때&#8230; 같은 있음직한 상황을 예로 든다만. 어쨌건 이 경우 Duck은 client, Turkey는 [...]]]></description>
			<content:encoded><![CDATA[<p>(<a href="http://headfirstlabs.com/books/hfdp/">HFDP</a>에서)<br />
Duck의 object가 부족해서 Turkey의 object를 이용하려고 한다&#8230; 라는 이상한 상황을 가정하고 있다. 보통 기존 모듈이 새로운 모듈을 이용하려고 하나 서로 interface가 맞지 않을때 &#8211; 구체적으로, 한 클라이언트가 다른 object의 method를 이용하고 싶지만 기존 보유한 method를 바꾸고 싶진 않다(또는 바꿀 수 없다) 할 때&#8230; 같은 있음직한 상황을 예로 든다만.</p>
<p>어쨌건 이 경우 Duck은 client, Turkey는 Adaptee이다. TurkeyAdapter는 타겟 interface인 Duck를 구현하며 &#8211; 당연하다. Adapter니까 &#8211; 이때 Adaptee의 method들을 이용한다는 것이 포인트이다.</p>
<pre class="brush: plain; light: false; title: ; toolbar: true; notranslate">
REPORT  zp_adapter.

*PARAMETERS:

CLASS demo DEFINITION.

  PUBLIC SECTION.
    CLASS-METHODS: main,
                   test_duck IMPORTING i_duck TYPE REF TO zif_duck.

ENDCLASS.                    &quot;demo DEFINITION

*----------------------------------------------------------------------*
*       CLASS demo IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS demo IMPLEMENTATION.

  METHOD main.
    DATA: gr_mallard_duck   TYPE REF TO zcl_mallard_duck,
          gr_wild_turkey    TYPE REF TO zcl_wild_turkey,
          gr_turkey_adapter TYPE REF TO zif_duck.  &quot; Adaptor for Duck
                                                   &quot; i.e. Duck is the target interface

    CREATE OBJECT gr_mallard_duck.
    CREATE OBJECT gr_wild_turkey.
    CREATE OBJECT gr_turkey_adapter TYPE zcl_turkey_adapter
      EXPORTING
        i_turkey = gr_wild_turkey.

    WRITE: / 'The Turkey says...'.
    gr_wild_turkey-&gt;zif_turkey~gobble( ).
    gr_wild_turkey-&gt;zif_turkey~fly( ).

    SKIP 2.

    WRITE: / 'The Duck says...'.
    test_duck( gr_mallard_duck ).

    SKIP 2.

    WRITE: / 'The Turkey Adapter says...'.
    test_duck( gr_turkey_adapter ).

  ENDMETHOD.                    &quot;demo

  METHOD test_duck.
    i_duck-&gt;quack( ).
    i_duck-&gt;fly( ).
  ENDMETHOD.                    &quot;test_duck

ENDCLASS.                    &quot;demo IMPLEMENTATION

START-OF-SELECTION.
  demo=&gt;main( ).
</pre>
<p>test_duck은 Duck interface를 인자로 받는다. Adapter는 Duck interface를 구현한 것이므로 test_duck의 인자로 Adapter를 넘길 수 있고, 그 Adapter의 method들 안에서 Adaptee의 method가 호출된다.</p>
<p>Duck, Turkey, TurkeyAdapter 등의 Class 및 Interface 선언 및 구현은 그냥 시스템 내 Global Class를 이용하였다.<br />
그래서, 여기서는 생략한다.</p>
]]></content:encoded>
			<wfw:commentRss>http://cloudscape.pe.kr/wp/the-adapter-pattern-in-abap/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>100 Best Global Brands</title>
		<link>http://cloudscape.pe.kr/wp/100-best-global-brands/</link>
		<comments>http://cloudscape.pe.kr/wp/100-best-global-brands/#comments</comments>
		<pubDate>Thu, 24 Sep 2009 15:32:08 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[SAP]]></category>
		<category><![CDATA[Global Brand]]></category>
		<category><![CDATA[H&M]]></category>

		<guid isPermaLink="false">http://cloudscape.pe.kr/wp/?p=540</guid>
		<description><![CDATA[BusinessWeek에서 2009년도 Top100 Best Global Brands를 발표했습니다. SAP는 작년에 비해 4계단 상승, 전체 27위로서 역대 최고기록을 세웠네요. 모 내가 잘 한 것도 아니고 특별 보너스가 나올 것도 아니지만 몸 담고 있는 조직이 잘 해나가는 것 같아 기분이 좋습니다. 순위를 살펴보면, 5위권까지는 변화가 없습니다. Coca-Cola &#8211; IBM &#8211; Microsoft &#8211; GE &#8211; Nokia 이고, Nokia 외에는 [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://bwnt.businessweek.com/interactive_reports/best_global_brands_2009/">BusinessWeek에서 2009년도 Top100 Best Global Brands를 발표</a>했습니다.</p>
<p>SAP는 작년에 비해 4계단 상승, 전체 27위로서 역대 최고기록을 세웠네요.<br />
모 내가 잘 한 것도 아니고 특별 보너스가 나올 것도 아니지만 몸 담고 있는 조직이 잘 해나가는 것 같아 기분이 좋습니다.</p>
<p>순위를 살펴보면, 5위권까지는 변화가 없습니다. Coca-Cola &#8211; IBM &#8211; Microsoft &#8211; GE &#8211; Nokia 이고, Nokia 외에는 모두 미국 회사이군요.<br />
5위 아래 순위가 재미있어지는데, 삼성이 21위에서 19위로, 20위권 안에 들어온 것이 무척 인상적입니다.<br />
개인적으로 가장 놀라운 것은 21위에 랭크된 <a href="http://www.hm.com">H&#038;M</a>입니다. 동네 옷가게 체인점인줄 알았더니 이건 모, 초수퍼울트라우량기업이네요.</p>
]]></content:encoded>
			<wfw:commentRss>http://cloudscape.pe.kr/wp/100-best-global-brands/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SAP 소식 몇가지</title>
		<link>http://cloudscape.pe.kr/wp/sap-%ec%86%8c%ec%8b%9d-%eb%aa%87%ea%b0%80%ec%a7%80/</link>
		<comments>http://cloudscape.pe.kr/wp/sap-%ec%86%8c%ec%8b%9d-%eb%aa%87%ea%b0%80%ec%a7%80/#comments</comments>
		<pubDate>Mon, 14 Sep 2009 15:46:29 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[SAP]]></category>
		<category><![CDATA[DJSI]]></category>
		<category><![CDATA[siemens]]></category>

		<guid isPermaLink="false">http://cloudscape.pe.kr/wp/?p=526</guid>
		<description><![CDATA[SAP가 소프트웨어 기업 중 &#8216;다우존스 지속가능성 지수(Dow Jones Sustainability Index, DJSI)&#8217; 3년 연속 1위를 했다는 기사가 나왔다. 이와 반대로, Siemens가 Maintenance Contract를 그만둔다는 루머에 대한 기사가 Wirtschaftswoche에서 나왔다. 관련 해명 기사가 사내 인트라넷 메인으로 뜨는 바람에 알게 되었다. &#8230; The current misinformation in the market provides incorrect information about the SAP Siemens relationship. SAP has [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://newswire.ytn.co.kr/newsRead.php?md=A01&#038;tm=1&#038;no=428073">SAP가 소프트웨어 기업 중 &#8216;다우존스 지속가능성 지수(Dow Jones Sustainability Index, DJSI)&#8217; 3년 연속 1위를 했다</a>는 기사가 나왔다.<br />
이와 반대로, <a href="http://www.wiwo.de/unternehmer-maerkte/siemens-hat-wartungsvertrag-mit-sap-zum-jahresende-gekuendigt-408052/">Siemens가 Maintenance Contract를 그만둔다는 루머</a>에 대한 기사가 Wirtschaftswoche에서 나왔다.<br />
관련 해명 기사가 사내 인트라넷 메인으로 뜨는 바람에 알게 되었다.</p>
<blockquote><p>&#8230; The current misinformation in the market provides incorrect information about the SAP Siemens relationship. SAP has and will continue to have a good, long-standing and very strong strategic relationship with Siemens; in fact, SAP is currently working with Siemens to deepen the relationship in a multitude of areas. Meanwhile, Siemens continues to leverage SAP solutions to manage its businesses around the world. Specific details of our relationship with Siemens will not be discussed in the media.</p></blockquote>
<p>협상이 아직 완료되지 않은 상황에서 나온 루머인지라 그 배경이 의심스럽지만 워낙 사안이 커서 회사는 신중하게 대처하는 모습이다.<br />
<a href="http://blogs.zdnet.com/Howlett/?p=1288">Blog에서도 제법 시끄러운 것 같고.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://cloudscape.pe.kr/wp/sap-%ec%86%8c%ec%8b%9d-%eb%aa%87%ea%b0%80%ec%a7%80/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

