view · edit · sidebar · attach · print · history

20100922-trace-limitation-data-flow-in-bsv_xml

<< Masa.20100923-trace-limitation-data-flow-in-oddbapp | 2010 | Masa.20100921-trace-import-limitation-process >>


  1. Result of update_bsv test script
  2. Confirm limitation data in bsv_xml.rb
  3. Trace limitation data flow in ODDB::App

Goal
  • Trace limitation data flow in bsv_xml.rb / 80%
Milestones
  1. Analysis of the result of test script
  2. Trace @lim_texts data flow in bsv_xml.rb 16:15
  3. Trace limitation data flow in ODDB::App class
Summary
Commits
ToDo Tomorrow
  1. Dimdi-Import-Error.
Keep in Mind
Attached Files

Result of update_bsv test script

Experiment
src/plugin/bsv_xml.rb

        when 'SwissmedicNo5'
# masa
if @text.to_i == 56107 || @text.to_i == 55972
  print "SwissmedicNo5(end_tag): ", @text, "\n"
  @masa = true
else
  @masa = false
end

src/plugin/bsv_xml.rb

        when /^Description(..)$/u
          key = $~[1].downcase.to_sym
          if @in_limitation
            if @lim_data # we are within a Package
p 'yes @lim_data' if @masa
              chp = Text::Chapter.new
              update_chapter chp, @html
              @lim_data.store key, chp
            else
p 'no @lim_data' if @masa
              @lim_texts.each_value do |text_data|
                chp = text_data[key] ||= Text::Chapter.new
                subheading = if @it_descriptions
                               [@itcode, @it_descriptions[key]].compact.join(': ')
                             else
                               @name[key]
                             end
                update_chapter chp, @html, subheading
              end
            end
if @masa
  p @html
  print "@lim_data.length=", @lim_data.length, "\n" if @lim_data
  print "@lim_text.length=", @lim_text.length, "\n" if @lim_text
end

Result

SwissmedicNo5(end_tag): 55972
"no @lim_data"
"Schwere, therapieresistente Akneformen."
"no @lim_data"
"Formes graves de l'acn\303\251, r\303\251sistantes \303\240 la th\303\251rapie."
"no @lim_data"
"Forme gravi di acne, resistenti alla terapia."
SwissmedicNo5(end_tag): 55972
"no @lim_data"
"Schwere, therapieresistente Akneformen."
"no @lim_data"
"Formes graves de l'acn\303\251, r\303\251sistantes \303\240 la th\303\251rapie."
"no @lim_data"
"Forme gravi di acne, resistenti alla terapia."
SwissmedicNo5(end_tag): 55972
"no @lim_data"
"Schwere, therapieresistente Akneformen."
"no @lim_data"
"Formes graves de l'acn\303\251, r\303\251sistantes \303\240 la th\303\251rapie."
"no @lim_data"
"Forme gravi di acne, resistenti alla terapia."

SwissmedicNo5(end_tag): 56107
"no @lim_data"
"Schwere, therapieresistente Akneformen."
"no @lim_data"
"Formes graves de l'acn\303\251, r\303\251sistantes \303\240 la th\303\251rapie."
"no @lim_data"
"Forme gravi di acne, resistenti alla terapia."
SwissmedicNo5(end_tag): 56107
"no @lim_data"
"Schwere, therapieresistente Akneformen."
"no @lim_data"
"Formes graves de l'acn\303\251, r\303\251sistantes \303\240 la th\303\251rapie."
"no @lim_data"
"Forme gravi di acne, resistenti alla terapia."

Consideration

  • why is the @lim_data not created?
  • @lim_data is certainly initialized as hash at <Pack> start tag
  • even if the hash is vacant, @lim_data will be recognized as true, not false
  • namely, @lim_data is only for limitation description data under <Pack> tag
  • the other limitation description data is saved directly in @lim_texts
  • there is no limitation description under <Pack> tag.

As for @lim_texts,

src/plugin/bsv_xml.rb

          @sl_entries.each do |pac_ptr, sl_data|
            pack = pac_ptr.resolve @app
            @known_packages.delete pac_ptr
            unless pack.nil?
              pointer = pac_ptr + :sl_entry
              if sl_data.empty?
                if pack.sl_entry
                  @deleted_sl_entries += 1
                  @app.delete pointer
                end
              else
                if pack.sl_entry
                  @updated_sl_entries += 1
                else
                  @created_sl_entries += 1
                end
                if (lim_data = @lim_texts[pac_ptr]) && !lim_data.empty?
                  sl_data.store :limitation, true
                end
                @app.update pointer.creator, sl_data, :bag
              end
            end
          end
          # masa
          # probably here limitations are counted
          @lim_texts.each do |pac_ptr, lim_data|
            if (pac = pac_ptr.resolve(@app)) && (sl_entry = pac.sl_entry)
              sl_ptr = sl_entry.pointer
              txt_ptr = sl_ptr + :limitation_text
              if lim_data.empty?
                if sl_entry.limitation_text
                  @deleted_limitation_texts += 1
                  @app.delete txt_ptr
                end
              else
                if sl_entry.limitation_text
                  @updated_limitation_texts += 1
                else
                  @created_limitation_texts += 1
                end
                @app.update txt_ptr.creator, lim_data, :bag
              end
            end
          end

Experiment
* run update_bsv method with only 10 data

  • confirm the bug

Result

Created SL-Entries                                            0
Updated SL-Entries                                           10
Deleted SL-Entries                                            0
Created Limitation-Texts                                      4
Updated Limitation-Texts                                      6
Deleted Limitation-Texts                                      0

Search result

Notes

  • 4 Limitation-Texts are counted and created but not shown.

Confirm limitation data in bsv_xml.rb

Confirm the limitation data parsed
src/plugin/bsv_xml.rb

print "txt_ptr="
p txt_ptr
print "lim_data="
pp lim_data
                @app.update txt_ptr.creator, lim_data, :bag

Result

txt_ptr=#<ODDB::Persistence::Pointer:0x7ff6749dbb70 @directions=[[:registration, "55972"], [:sequence, "01"], [:package, "011"], [:sl_entry], [:limitation_text]]>
lim_data={:de=>
  #<ODDB::Text::Chapter:0x7f1c43c0f2b8
   @heading="",
   @sections=
    [#<ODDB::Text::Section:0x7f1c43c0f1c8
      @paragraphs=
       [#<ODDB::Text::Paragraph:0x7f1c43c0f088
         @format=
          #<ODDB::Text::Format:0x7f1c43c0eed0 @end=-1, @start=0, @values=[]>,
         @formats=
          [#<ODDB::Text::Format:0x7f1c43c0eed0 @end=-1, @start=0, @values=[]>],
         @preformatted=false,
         @raw_txt=nil,
         @text="Schwere, therapieresistente Akneformen.">],
      @subheading="Isotretinoin Mepha\n">]>,
 :fr=>
  #<ODDB::Text::Chapter:0x7f1c43c0d378
   @heading="",
   @sections=
    [#<ODDB::Text::Section:0x7f1c43c0d260
      @paragraphs=
       [#<ODDB::Text::Paragraph:0x7f1c43c0d148
         @format=
          #<ODDB::Text::Format:0x7f1c43c0cf90 @end=-1, @start=0, @values=[]>,
         @formats=
          [#<ODDB::Text::Format:0x7f1c43c0cf90 @end=-1, @start=0, @values=[]>],
         @preformatted=false,
         @raw_txt=nil,
         @text=
          "Formes graves de l'acn\303\251, r\303\251sistantes \303\240 la th\303\251rapie.">],
      @subheading="Isotretinoine Mepha\n">]>,
 :it=>
  #<ODDB::Text::Chapter:0x7f1c43c0b730
   @heading="",
   @sections=
    [#<ODDB::Text::Section:0x7f1c43c0b640
      @paragraphs=
       [#<ODDB::Text::Paragraph:0x7f1c43c0b528
         @format=
          #<ODDB::Text::Format:0x7f1c43c0b3c0 @end=-1, @start=0, @values=[]>,
         @formats=
          [#<ODDB::Text::Format:0x7f1c43c0b3c0 @end=-1, @start=0, @values=[]>],
         @preformatted=false,
         @raw_txt=nil,
         @text="Forme gravi di acne, resistenti alla terapia.">],
      @subheading="Isotretinoine Mepha\n">]>}

....

txt_ptr=#<ODDB::Persistence::Pointer:0x7ff6743d3b60 @directions=[[:registration, "56107"], [:sequence, "02"], [:package, "008"], [:sl_entry], [:limitation_text]]>
lim_data={:de=>
  #<ODDB::Text::Chapter:0x7f1c43608180
   @heading="",
   @sections=
    [#<ODDB::Text::Section:0x7f1c43607aa0
      @paragraphs=
       [#<ODDB::Text::Paragraph:0x7f1c43607988
         @format=
          #<ODDB::Text::Format:0x7f1c43607848 @end=-1, @start=0, @values=[]>,
         @formats=
          [#<ODDB::Text::Format:0x7f1c43607848 @end=-1, @start=0, @values=[]>],
         @preformatted=false,
         @raw_txt=nil,
         @text="Schwere, therapieresistente Akneformen.">],
      @subheading="Isotretinoin Teva\n">]>,
 :fr=>
  #<ODDB::Text::Chapter:0x7f1c436068a8
   @heading="",
   @sections=
    [#<ODDB::Text::Section:0x7f1c436061c8
      @paragraphs=
       [#<ODDB::Text::Paragraph:0x7f1c436060b0
         @format=
          #<ODDB::Text::Format:0x7f1c43605f70 @end=-1, @start=0, @values=[]>,
         @formats=
          [#<ODDB::Text::Format:0x7f1c43605f70 @end=-1, @start=0, @values=[]>],
         @preformatted=false,
         @raw_txt=nil,
         @text=
          "Formes graves de l'acn\303\251, r\303\251sistantes \303\240 la th\303\251rapie.">],
      @subheading="Isotretinoin Teva\n">]>,
 :it=>
  #<ODDB::Text::Chapter:0x7f1c43604fd0
   @heading="",
   @sections=
    [#<ODDB::Text::Section:0x7f1c436048f0
      @paragraphs=
       [#<ODDB::Text::Paragraph:0x7f1c436047d8
         @format=
          #<ODDB::Text::Format:0x7f1c43604698 @end=-1, @start=0, @values=[]>,
         @formats=
          [#<ODDB::Text::Format:0x7f1c43604698 @end=-1, @start=0, @values=[]>],
         @preformatted=false,
         @raw_txt=nil,
         @text="Forme gravi di acne, resistenti alla terapia.">],
      @subheading="Isotretinoin Teva\n">]>}

Notes

  • The limitation data both 55972 and 56107 (Registration No.)is certainly parsed.

Confirm data
src/plugin/bsv_xml.rb

          @sl_entries.each do |pac_ptr, sl_data|
print "pac_ptr="
p pac_ptr
print "sl_data="
pp sl_data

Result

pac_ptr=#<ODDB::Persistence::Pointer:0x7ffc904718e8 @directions=[[:registration, "55972"], [:sequence, "01"], [:package, "011"]]>
sl_data={:limitation_points=>nil,
 :bsv_dossier=>"17846",
 :status=>"0",
 :introduction_date=>Sat, 01 Feb 2003,
 :limitation=>nil,
 :valid_until=>Fri, 31 Dec 9999,
 :valid_from=>Sat, 01 Feb 2003}
pac_ptr=#<ODDB::Persistence::Pointer:0x7ffc90476320 @directions=[[:registration, "55972"], [:sequence, "01"], [:package, "009"]]>
sl_data={:limitation_points=>nil,
 :bsv_dossier=>"17846",
 :status=>"0",
 :introduction_date=>Sat, 01 Feb 2003,
 :limitation=>nil,
 :valid_until=>Fri, 31 Dec 9999,
 :valid_from=>Sat, 01 Feb 2003}
pac_ptr=#<ODDB::Persistence::Pointer:0x7ffc9045d6b8 @directions=[[:registration, "55972"], [:sequence, "02"], [:package, "015"]]>
sl_data={:limitation_points=>nil,
 :bsv_dossier=>"17846",
 :status=>"0",
 :introduction_date=>Sat, 01 Feb 2003,
 :limitation=>nil,
 :valid_until=>Fri, 31 Dec 9999,
 :valid_from=>Sat, 01 Feb 2003}
pac_ptr=#<ODDB::Persistence::Pointer:0x7ffc90461c18 @directions=[[:registration, "55972"], [:sequence, "02"], [:package, "013"]]>
sl_data={:limitation_points=>nil,
 :bsv_dossier=>"17846",
 :status=>"0",
 :introduction_date=>Sat, 01 Feb 2003,
 :limitation=>nil,
 :valid_until=>Fri, 31 Dec 9999,
 :valid_from=>Sat, 01 Feb 2003}
pac_ptr=#<ODDB::Persistence::Pointer:0x7ffc9044dad8 @directions=[[:registration, "55972"], [:sequence, "03"], [:package, "019"]]>
sl_data={:limitation_points=>nil,
 :bsv_dossier=>"17846",
 :status=>"0",
 :introduction_date=>Sun, 01 Jul 2007,
 :limitation=>nil,
 :valid_until=>Fri, 31 Dec 9999,
 :valid_from=>Sun, 01 Jul 2007}
pac_ptr=#<ODDB::Persistence::Pointer:0x7ffc9044a658 @directions=[[:registration, "55972"], [:sequence, "03"], [:package, "017"]]>
sl_data={:limitation_points=>nil,
 :bsv_dossier=>"17846",
 :status=>"0",
 :introduction_date=>Sun, 01 Jul 2007,
 :limitation=>nil,
 :valid_until=>Fri, 31 Dec 9999,
 :valid_from=>Sun, 01 Jul 2007}
pac_ptr=#<ODDB::Persistence::Pointer:0x7ffc906f8418 @directions=[[:registration, "56107"], [:sequence, "01"], [:package, "004"]]>
sl_data={:limitation_points=>nil,
 :bsv_dossier=>"17885",
 :status=>"0",
 :introduction_date=>Thu, 01 May 2003,
 :limitation=>nil,
 :valid_until=>Fri, 31 Dec 9999,
 :valid_from=>Thu, 01 May 2003}
pac_ptr=#<ODDB::Persistence::Pointer:0x7ffc906fed68 @directions=[[:registration, "56107"], [:sequence, "01"], [:package, "002"]]>
sl_data={:limitation_points=>nil,
 :bsv_dossier=>"17885",
 :status=>"0",
 :introduction_date=>Thu, 01 May 2003,
 :limitation=>nil,
 :valid_until=>Fri, 31 Dec 9999,
 :valid_from=>Thu, 01 May 2003}
pac_ptr=#<ODDB::Persistence::Pointer:0x7ffc906e5200 @directions=[[:registration, "56107"], [:sequence, "02"], [:package, "006"]]>
sl_data={:limitation_points=>nil,
 :bsv_dossier=>"17885",
 :status=>"0",
 :introduction_date=>Thu, 01 May 2003,
 :limitation=>nil,
 :valid_until=>Fri, 31 Dec 9999,
 :valid_from=>Thu, 01 May 2003}
pac_ptr=#<ODDB::Persistence::Pointer:0x7ffc906df490 @directions=[[:registration, "56107"], [:sequence, "02"], [:package, "008"]]>
sl_data={:limitation_points=>nil,
 :bsv_dossier=>"17885",
 :status=>"0",
 :introduction_date=>Thu, 01 May 2003,
 :limitation=>nil,
 :valid_until=>Fri, 31 Dec 9999,
 :valid_from=>Thu, 01 May 2003}

Consideration

Try it again

          @sl_entries.each do |pac_ptr, sl_data|
            pack = pac_ptr.resolve @app
            @known_packages.delete pac_ptr
            unless pack.nil?
              pointer = pac_ptr + :sl_entry
              if sl_data.empty?
                if pack.sl_entry
                  @deleted_sl_entries += 1
                  @app.delete pointer
                end
              else
                if pack.sl_entry
                  @updated_sl_entries += 1
                else
                  @created_sl_entries += 1
                end
                if (lim_data = @lim_texts[pac_ptr]) && !lim_data.empty?
                  sl_data.store :limitation, true
                end
                @app.update pointer.creator, sl_data, :bag
              end
            end
print "pac_ptr="
p pac_ptr
print "sl_data="
pp sl_data
          end

Result

pac_ptr=#<ODDB::Persistence::Pointer:0x7f1d42637778 @directions=[[:registration, "55972"], [:sequence, "01"], [:package, "011"]]>
sl_data={:limitation_points=>nil,
 :bsv_dossier=>"17846",
 :status=>"0",
 :introduction_date=>Sat, 01 Feb 2003,
 :limitation=>true,
 :valid_until=>Fri, 31 Dec 9999,
 :valid_from=>Sat, 01 Feb 2003}
pac_ptr=#<ODDB::Persistence::Pointer:0x7f1d4263c160 @directions=[[:registration, "55972"], [:sequence, "01"], [:package, "009"]]>
sl_data={:limitation_points=>nil,
 :bsv_dossier=>"17846",
 :status=>"0",
 :introduction_date=>Sat, 01 Feb 2003,
 :limitation=>true,
 :valid_until=>Fri, 31 Dec 9999,
 :valid_from=>Sat, 01 Feb 2003}
pac_ptr=#<ODDB::Persistence::Pointer:0x7f1d42625370 @directions=[[:registration, "55972"], [:sequence, "02"], [:package, "015"]]>
sl_data={:limitation_points=>nil,
 :bsv_dossier=>"17846",
 :status=>"0",
 :introduction_date=>Sat, 01 Feb 2003,
 :limitation=>true,
 :valid_until=>Fri, 31 Dec 9999,
 :valid_from=>Sat, 01 Feb 2003}
pac_ptr=#<ODDB::Persistence::Pointer:0x7f1d42629380 @directions=[[:registration, "55972"], [:sequence, "02"], [:package, "013"]]>
sl_data={:limitation_points=>nil,
 :bsv_dossier=>"17846",
 :status=>"0",
 :introduction_date=>Sat, 01 Feb 2003,
 :limitation=>true,
 :valid_until=>Fri, 31 Dec 9999,
 :valid_from=>Sat, 01 Feb 2003}
pac_ptr=#<ODDB::Persistence::Pointer:0x7f1d426154c0 @directions=[[:registration, "55972"], [:sequence, "03"], [:package, "019"]]>
sl_data={:limitation_points=>nil,
 :bsv_dossier=>"17846",
 :status=>"0",
 :introduction_date=>Sun, 01 Jul 2007,
 :limitation=>true,
 :valid_until=>Fri, 31 Dec 9999,
 :valid_from=>Sun, 01 Jul 2007}
pac_ptr=#<ODDB::Persistence::Pointer:0x7f1d426122e8 @directions=[[:registration, "55972"], [:sequence, "03"], [:package, "017"]]>
sl_data={:limitation_points=>nil,
 :bsv_dossier=>"17846",
 :status=>"0",
 :introduction_date=>Sun, 01 Jul 2007,
 :limitation=>true,
 :valid_until=>Fri, 31 Dec 9999,
 :valid_from=>Sun, 01 Jul 2007}
pac_ptr=#<ODDB::Persistence::Pointer:0x7f1d428b9af0 @directions=[[:registration, "56107"], [:sequence, "01"], [:package, "004"]]>
sl_data={:limitation_points=>nil,
 :bsv_dossier=>"17885",
 :status=>"0",
 :introduction_date=>Thu, 01 May 2003,
 :limitation=>true,
 :valid_until=>Fri, 31 Dec 9999,
 :valid_from=>Thu, 01 May 2003}
pac_ptr=#<ODDB::Persistence::Pointer:0x7f1d428bf388 @directions=[[:registration, "56107"], [:sequence, "01"], [:package, "002"]]>
sl_data={:limitation_points=>nil,
 :bsv_dossier=>"17885",
 :status=>"0",
 :introduction_date=>Thu, 01 May 2003,
 :limitation=>true,
 :valid_until=>Fri, 31 Dec 9999,
 :valid_from=>Thu, 01 May 2003}
pac_ptr=#<ODDB::Persistence::Pointer:0x7f1d428a4880 @directions=[[:registration, "56107"], [:sequence, "02"], [:package, "006"]]>
sl_data={:limitation_points=>nil,
 :bsv_dossier=>"17885",
 :status=>"0",
 :introduction_date=>Thu, 01 May 2003,
 :limitation=>true,
 :valid_until=>Fri, 31 Dec 9999,
 :valid_from=>Thu, 01 May 2003}
pac_ptr=#<ODDB::Persistence::Pointer:0x7f1d4289e278 @directions=[[:registration, "56107"], [:sequence, "02"], [:package, "008"]]>
sl_data={:limitation_points=>nil,
 :bsv_dossier=>"17885",
 :status=>"0",
 :introduction_date=>Thu, 01 May 2003,
 :limitation=>true,
 :valid_until=>Fri, 31 Dec 9999,
 :valid_from=>Thu, 01 May 2003}

Consideration

  • every :limitation becomes true (as I expected)
  • Threfore,
    • @sl_data#:limitation = true
    • every @lim_data contains limitation description data
    • @app.update method is called as same in both 55972 and 56107

So

  • I should trace the limitation data flow through @app.update (ODDB::App#update) method after this

Confrim2

  • condition: after delete 2 limitation tag and run update_bsv
  • after that, replace it back to the original one, and run update_bsv again

Setting
src/plugin/bsv_xml.rb

print "txt_ptr="
p txt_ptr
print "sl_enry.limitation_text="
pp sl_entry.limitation_text
                @app.update txt_ptr.creator, lim_data, :bag

Result

txt_ptr=#<ODDB::Persistence::Pointer:0x7f9a28118040 @directions=[[:registration, "55972"], [:sequence, "01"], [:package, "011"], [:sl_entry], [:limitation_text]]>
sl_enry.limitation_text=nil
txt_ptr=#<ODDB::Persistence::Pointer:0x7f9a280e8a98 @directions=[[:registration, "55972"], [:sequence, "01"], [:package, "009"], [:sl_entry], [:limitation_text]]>
sl_enry.limitation_text=nil
txt_ptr=#<ODDB::Persistence::Pointer:0x7f9a27f91b40 @directions=[[:registration, "55972"], [:sequence, "02"], [:package, "015"], [:sl_entry], [:limitation_text]]>
sl_enry.limitation_text=#<ODDB::LimitationText:0x7f9a27fb46e0
 @odba_class=nil,
 @odba_container=nil,
 @odba_id=11081906,
 @receiver=nil,
 @receiver_loaded=nil>
txt_ptr=#<ODDB::Persistence::Pointer:0x7f9a27f838d8 @directions=[[:registration, "55972"], [:sequence, "02"], [:package, "013"], [:sl_entry], [:limitation_text]]>
sl_enry.limitation_text=#<ODDB::LimitationText:0x7f9a27fa0500
 @odba_class=nil,
 @odba_container=nil,
 @odba_id=11081907,
 @receiver=nil,
 @receiver_loaded=nil>
txt_ptr=#<ODDB::Persistence::Pointer:0x7f9a27e51f00 @directions=[[:registration, "55972"], [:sequence, "03"], [:package, "019"], [:sl_entry], [:limitation_text]]>
sl_enry.limitation_text=#<ODDB::LimitationText:0x7f9a27e74708
 @odba_class=nil,
 @odba_container=nil,
 @odba_id=10899070,
 @receiver=nil,
 @receiver_loaded=nil>
txt_ptr=#<ODDB::Persistence::Pointer:0x7f9a27e42410 @directions=[[:registration, "55972"], [:sequence, "03"], [:package, "017"], [:sl_entry], [:limitation_text]]>
sl_enry.limitation_text=#<ODDB::LimitationText:0x7f9a27e5fd80
 @odba_class=nil,
 @odba_container=nil,
 @odba_id=10899071,
 @receiver=nil,
 @receiver_loaded=nil>
txt_ptr=#<ODDB::Persistence::Pointer:0x7f9a27d0a9d0 @directions=[[:registration, "56107"], [:sequence, "01"], [:package, "004"], [:sl_entry], [:limitation_text]]>
sl_enry.limitation_text=nil
txt_ptr=#<ODDB::Persistence::Pointer:0x7f9a27cfd578 @directions=[[:registration, "56107"], [:sequence, "01"], [:package, "002"], [:sl_entry], [:limitation_text]]>
sl_enry.limitation_text=nil
txt_ptr=#<ODDB::Persistence::Pointer:0x7f9a27bdf3d0 @directions=[[:registration, "56107"], [:sequence, "02"], [:package, "006"], [:sl_entry], [:limitation_text]]>
sl_enry.limitation_text=nil
txt_ptr=#<ODDB::Persistence::Pointer:0x7f9a27bd4e80 @directions=[[:registration, "56107"], [:sequence, "02"], [:package, "008"], [:sl_entry], [:limitation_text]]>
sl_enry.limitation_text=nil

Screen Shots
Before

After

Therefore

  • Anyway, the problem would be after calling @app.update method

Trace limitation data flow in ODDB::App

  • tomorrow

Meanings of LimitationXX tag in Preparations.xml

Mail https://mail.google.com/a/ywesee.com/#inbox/12b386d75ffa3f24

view · edit · sidebar · attach · print · history
Page last modified on July 13, 2011, at 11:58 AM