<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[ABAP動的プログラミング：動的なデータオブジェクト]]></title><description><![CDATA[<p>このトピックは動的なデータオブジェクトを取り上げて、その特徴と使用方法を説明します。</p><p></p><h2 class="sectionedit4 page-header" id="動的なデータオブジェクトとは">動的なデータオブジェクトとは<a class="anchorjs-link " href="https://www.sappane.com/kdict/abap/16/66/36#%E5%8B%95%E7%9A%84%E3%81%AA%E3%83%87%E3%83%BC%E3%82%BF%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%A8%E3%81%AF"></a></h2><div class="level2"><p>動的なデータオブジェクトを説明する前にまず静的なデータオブジェクトを説明しておきます。</p><p>プログラムの宣言部分において DATAなどの命令を使用して定義するデータオブジェクトはすべて静的に登録され、プログラムの起動時にはすでに存在する「静的なデータオブジェクト」となります。</p><p>一方、動的なデータオブジェクトとは、プログラム実行時に、CREATE DATA命令を使用して作成されるデータオブジェクトです。</p><p>動的なデータオブジェクトは以下の特徴があります。</p><ul class=" fix-media-list-overlap"><li class="level1"><div class="li">現在の ABAPプログラムの内部セッションの中にデータオブジェクトが登録されます。</div></li><li class="level1"><div class="li">動的なデータ型を利用することができます。</div></li><li class="level1"><div class="li">登録されるデータオブジェクトは独自の名称を持ちません。データ参照変数を使用した場合にのみアドレス指定することができます。</div></li><li class="level1"><div class="li">内容をアクセスするにはフィールドシンボルを利用しなければなりません。</div></li></ul></div><h2 class="sectionedit5 page-header" id="動的なデータオブジェクト作成">動的なデータオブジェクト作成<a class="anchorjs-link " href="https://www.sappane.com/kdict/abap/16/66/36#%E5%8B%95%E7%9A%84%E3%81%AA%E3%83%87%E3%83%BC%E3%82%BF%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E4%BD%9C%E6%88%90"></a></h2><div class="level2"></div><h3 class="sectionedit6" id="静的なデータ型使用の場合">静的なデータ型使用の場合<a class="anchorjs-link " href="https://www.sappane.com/kdict/abap/16/66/36#%E9%9D%99%E7%9A%84%E3%81%AA%E3%83%87%E3%83%BC%E3%82%BF%E5%9E%8B%E4%BD%BF%E7%94%A8%E3%81%AE%E5%A0%B4%E5%90%88"></a></h3><div class="level3"><p>静的なデータ型を利用して動的なデータオブジェクトを作成するには、TYPEオプションを使用します。 TYPEオプションの使い方は基本DATA命令と同じですが、タイプ名を指定する際に動的な名称も使用可能です。 以下のような型を使用することができます。</p><ul class=" fix-media-list-overlap"><li class="level1"><div class="li">ABAP基本タイプ<br />CREATE DATA dref TYPE c LENGTH 3.</div></li><li class="level1"><div class="li">TYPESによって定義された任意のデータ型<br />TYPES TYP_BKPF TYPE STANDARD TABLE OF BKDF<br />CREATE DATA dref TYPE TYP_BKPF.</div></li><li class="level1"><div class="li">ABAP ディクショナリによる任意のデータ型<br />CREATE DATA dref TYPE BKDF.<br />CREATE DATA dref TYPE STANDARD TABLE OF BKDF</div></li></ul><p>サンプルソース：</p><pre class="code">DATA typ  TYPE c.
DATA len  TYPE i.
DATA dref TYPE REF TO data.
FIELD-SYMBOLS &lt;fs&gt; TYPE ANY.
typ = 'c'.
len = 30.
CREATE DATA dref TYPE (typ) LENGTH len.
ASSIGN dref-&gt;* TO &lt;fs&gt;.
&lt;fs&gt; =  'ABCDEF'.
write &lt;fs&gt;.</pre></div><h3 class="sectionedit7" id="動的なデータ型使用の場合">動的なデータ型使用の場合<a class="anchorjs-link " href="https://www.sappane.com/kdict/abap/16/66/36#%E5%8B%95%E7%9A%84%E3%81%AA%E3%83%87%E3%83%BC%E3%82%BF%E5%9E%8B%E4%BD%BF%E7%94%A8%E3%81%AE%E5%A0%B4%E5%90%88"></a></h3><div class="level3"><p>実行時データ型サービス (RTTS) データ型オブジェクトによって記述される動的なデータ型のデータオ ブジェクトを生成するには、TYPE HANDLEオプションを使います。</p><p>サンプルソース：</p><pre class="code">DATA:
      r_stru TYPE REF TO cl_abap_structdescr,
      it_comp TYPE cl_abap_structdescr=&gt;component_table,
      r_comp TYPE abap_componentdescr,
      r_elem TYPE REF TO cl_abap_elemdescr,
      r_data TYPE REF TO DATA.
DATA: length_of_field
          TYPE I VALUE 10.
FIELD-SYMBOLS: &lt;fs&gt; TYPE ANY.
START-OF-SELECTION.
r_elem = cl_abap_elemdescr=&gt;get_c( length_of_field ).
r_comp-name = 'FIELD1'.
r_comp-type  = r_elem.
APPEND r_comp TO it_comp.
r_stru = cl_abap_structdescr=&gt;create( it_comp ).
 CREATE DATA r_data TYPE HANDLE r_stru.
 ASSIGN r_data-&gt;('FIELD1') TO &lt;fs&gt;.
&lt;fs&gt; = 'ABC'.
WRITE: / &lt;fs&gt;.</pre></div><div class="plugin_include_content plugin_include__kdict:abap:adsense:ads_content_footer" id="plugin_include__kdict__abap__adsense__ads_content_footer"><div class="level3"><table><tbody><tr><td></td><td></td></tr><tr></tr></tbody></table></div></div><p></p>]]></description><link>http://www.isummary.jp/topic/248/abap動的プログラミング-動的なデータオブジェクト</link><generator>RSS for Node</generator><lastBuildDate>Sun, 09 Aug 2026 16:41:30 GMT</lastBuildDate><atom:link href="http://www.isummary.jp/topic/248.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 07 Dec 2019 03:50:13 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to ABAP動的プログラミング：動的なデータオブジェクト on Sat, 07 Dec 2019 03:50:13 GMT]]></title><description><![CDATA[<p>このトピックは動的なデータオブジェクトを取り上げて、その特徴と使用方法を説明します。</p><p></p><h2 class="sectionedit4 page-header" id="動的なデータオブジェクトとは">動的なデータオブジェクトとは<a class="anchorjs-link " href="https://www.sappane.com/kdict/abap/16/66/36#%E5%8B%95%E7%9A%84%E3%81%AA%E3%83%87%E3%83%BC%E3%82%BF%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%A8%E3%81%AF"></a></h2><div class="level2"><p>動的なデータオブジェクトを説明する前にまず静的なデータオブジェクトを説明しておきます。</p><p>プログラムの宣言部分において DATAなどの命令を使用して定義するデータオブジェクトはすべて静的に登録され、プログラムの起動時にはすでに存在する「静的なデータオブジェクト」となります。</p><p>一方、動的なデータオブジェクトとは、プログラム実行時に、CREATE DATA命令を使用して作成されるデータオブジェクトです。</p><p>動的なデータオブジェクトは以下の特徴があります。</p><ul class=" fix-media-list-overlap"><li class="level1"><div class="li">現在の ABAPプログラムの内部セッションの中にデータオブジェクトが登録されます。</div></li><li class="level1"><div class="li">動的なデータ型を利用することができます。</div></li><li class="level1"><div class="li">登録されるデータオブジェクトは独自の名称を持ちません。データ参照変数を使用した場合にのみアドレス指定することができます。</div></li><li class="level1"><div class="li">内容をアクセスするにはフィールドシンボルを利用しなければなりません。</div></li></ul></div><h2 class="sectionedit5 page-header" id="動的なデータオブジェクト作成">動的なデータオブジェクト作成<a class="anchorjs-link " href="https://www.sappane.com/kdict/abap/16/66/36#%E5%8B%95%E7%9A%84%E3%81%AA%E3%83%87%E3%83%BC%E3%82%BF%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E4%BD%9C%E6%88%90"></a></h2><div class="level2"></div><h3 class="sectionedit6" id="静的なデータ型使用の場合">静的なデータ型使用の場合<a class="anchorjs-link " href="https://www.sappane.com/kdict/abap/16/66/36#%E9%9D%99%E7%9A%84%E3%81%AA%E3%83%87%E3%83%BC%E3%82%BF%E5%9E%8B%E4%BD%BF%E7%94%A8%E3%81%AE%E5%A0%B4%E5%90%88"></a></h3><div class="level3"><p>静的なデータ型を利用して動的なデータオブジェクトを作成するには、TYPEオプションを使用します。 TYPEオプションの使い方は基本DATA命令と同じですが、タイプ名を指定する際に動的な名称も使用可能です。 以下のような型を使用することができます。</p><ul class=" fix-media-list-overlap"><li class="level1"><div class="li">ABAP基本タイプ<br />CREATE DATA dref TYPE c LENGTH 3.</div></li><li class="level1"><div class="li">TYPESによって定義された任意のデータ型<br />TYPES TYP_BKPF TYPE STANDARD TABLE OF BKDF<br />CREATE DATA dref TYPE TYP_BKPF.</div></li><li class="level1"><div class="li">ABAP ディクショナリによる任意のデータ型<br />CREATE DATA dref TYPE BKDF.<br />CREATE DATA dref TYPE STANDARD TABLE OF BKDF</div></li></ul><p>サンプルソース：</p><pre class="code">DATA typ  TYPE c.
DATA len  TYPE i.
DATA dref TYPE REF TO data.
FIELD-SYMBOLS &lt;fs&gt; TYPE ANY.
typ = 'c'.
len = 30.
CREATE DATA dref TYPE (typ) LENGTH len.
ASSIGN dref-&gt;* TO &lt;fs&gt;.
&lt;fs&gt; =  'ABCDEF'.
write &lt;fs&gt;.</pre></div><h3 class="sectionedit7" id="動的なデータ型使用の場合">動的なデータ型使用の場合<a class="anchorjs-link " href="https://www.sappane.com/kdict/abap/16/66/36#%E5%8B%95%E7%9A%84%E3%81%AA%E3%83%87%E3%83%BC%E3%82%BF%E5%9E%8B%E4%BD%BF%E7%94%A8%E3%81%AE%E5%A0%B4%E5%90%88"></a></h3><div class="level3"><p>実行時データ型サービス (RTTS) データ型オブジェクトによって記述される動的なデータ型のデータオ ブジェクトを生成するには、TYPE HANDLEオプションを使います。</p><p>サンプルソース：</p><pre class="code">DATA:
      r_stru TYPE REF TO cl_abap_structdescr,
      it_comp TYPE cl_abap_structdescr=&gt;component_table,
      r_comp TYPE abap_componentdescr,
      r_elem TYPE REF TO cl_abap_elemdescr,
      r_data TYPE REF TO DATA.
DATA: length_of_field
          TYPE I VALUE 10.
FIELD-SYMBOLS: &lt;fs&gt; TYPE ANY.
START-OF-SELECTION.
r_elem = cl_abap_elemdescr=&gt;get_c( length_of_field ).
r_comp-name = 'FIELD1'.
r_comp-type  = r_elem.
APPEND r_comp TO it_comp.
r_stru = cl_abap_structdescr=&gt;create( it_comp ).
 CREATE DATA r_data TYPE HANDLE r_stru.
 ASSIGN r_data-&gt;('FIELD1') TO &lt;fs&gt;.
&lt;fs&gt; = 'ABC'.
WRITE: / &lt;fs&gt;.</pre></div><div class="plugin_include_content plugin_include__kdict:abap:adsense:ads_content_footer" id="plugin_include__kdict__abap__adsense__ads_content_footer"><div class="level3"><table><tbody><tr><td></td><td></td></tr><tr></tr></tbody></table></div></div><p></p>]]></description><link>http://www.isummary.jp/post/248</link><guid isPermaLink="true">http://www.isummary.jp/post/248</guid><dc:creator><![CDATA[峯文]]></dc:creator><pubDate>Sat, 07 Dec 2019 03:50:13 GMT</pubDate></item></channel></rss>