<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>Question Re: Silly question about RFC for Ruby... in Additional Q&amp;A</title>
    <link>https://community.sap.com/t5/additional-q-a/silly-question-about-rfc-for-ruby/qaa-p/1486742#M5020</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi - not sure that I fully understand your question -&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;You can write standalone scripts in Ruby to call RFC functions, such as:&lt;/P&gt;&lt;PRE&gt;&lt;CODE&gt;
require 'saprfc'

rfc = SAP::Rfc.new(...)
i = rfc.discover('RFC_READ_REPORT')
i.program.value = 'RSDBRUNT'
rfc.call(i)
i.qtab.hashRows{|r|
   puts r['LINE']
}
rfc.close
&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;If need actual control via the diag protocol of the GUI then you need to look at OLE automation for Ruby + the GUI automation controls.&lt;/P&gt;&lt;P&gt;Cheers.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 23 Aug 2006 06:02:46 GMT</pubDate>
    <dc:creator>Former Member</dc:creator>
    <dc:date>2006-08-23T06:02:46Z</dc:date>
    <item>
      <title>Silly question about RFC for Ruby...</title>
      <link>https://community.sap.com/t5/additional-q-a/silly-question-about-rfc-for-ruby/qaq-p/1486741</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I'm learning and loving Ruby, before I move to Rails....So I got a question....I haven't install RFC for Ruby yet....But....Can I connect to SAP from Ruby??? I mean....Just from Ruby, like a terminal server??? Maybe it's a silly question...but I just wanted to know that -:)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Greetings,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Blag.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 22 Aug 2006 22:02:52 GMT</pubDate>
      <guid>https://community.sap.com/t5/additional-q-a/silly-question-about-rfc-for-ruby/qaq-p/1486741</guid>
      <dc:creator>Former Member</dc:creator>
      <dc:date>2006-08-22T22:02:52Z</dc:date>
    </item>
    <item>
      <title>Re: Silly question about RFC for Ruby...</title>
      <link>https://community.sap.com/t5/additional-q-a/silly-question-about-rfc-for-ruby/qaa-p/1486742#M5020</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi - not sure that I fully understand your question -&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;You can write standalone scripts in Ruby to call RFC functions, such as:&lt;/P&gt;&lt;PRE&gt;&lt;CODE&gt;
require 'saprfc'

rfc = SAP::Rfc.new(...)
i = rfc.discover('RFC_READ_REPORT')
i.program.value = 'RSDBRUNT'
rfc.call(i)
i.qtab.hashRows{|r|
   puts r['LINE']
}
rfc.close
&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;If need actual control via the diag protocol of the GUI then you need to look at OLE automation for Ruby + the GUI automation controls.&lt;/P&gt;&lt;P&gt;Cheers.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 23 Aug 2006 06:02:46 GMT</pubDate>
      <guid>https://community.sap.com/t5/additional-q-a/silly-question-about-rfc-for-ruby/qaa-p/1486742#M5020</guid>
      <dc:creator>Former Member</dc:creator>
      <dc:date>2006-08-23T06:02:46Z</dc:date>
    </item>
    <item>
      <title>Re: Silly question about RFC for Ruby...</title>
      <link>https://community.sap.com/t5/additional-q-a/silly-question-about-rfc-for-ruby/qaa-p/1486743#M5021</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Blag,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;this test script shows you the different possibilities with RFC Calls. Tables for Import and Export, Structures, ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE&gt;&lt;CODE&gt;require 'test/unit'
require 'test/unit/assertions'
require 'rubygems'
require_gem 'saprfc'

class SAPTest &amp;lt; Test::Unit::TestCase
  
  # Login Data
  @@partneremployeeid = "111"
  @@password = "test1"
  @@newpassword = "test2"
  # Product Data
  @@material = 'P-100'
  @@unit = ''
  # Values set during Test
  @@customer = ''
  @@salesorg = ''
  @@subtotal1 = ''
  @@subtotal2 = ''
  
  def setup
    SAP::Rfc.useCache = true
    @rfc = SAP::Rfc.new(
                   :ashost =&amp;gt; "your.server",
                   :sysnr  =&amp;gt; 00,
                   :lang   =&amp;gt; "EN",
                   :client =&amp;gt; "800",
                   :user   =&amp;gt; "user",
                   :passwd =&amp;gt; "password",
                   :trace  =&amp;gt; 0
                 )
  end
  
  def test_CSC_00005_Login
    # Check Password
    pwcheck = @rfc.discover("BAPI_PAR_EMPLOYEE_CHECKPASSWOR")
    pwcheck.PARTNEREMPLOYEEID.value = @@partneremployeeid
    pwcheck.PASSWORD.value = @@password
    @rfc.call(pwcheck)
    ret = pwcheck.RETURN.value
    assert(ret['TYPE'] == 'S')
    # Get Customer Number
    excheck = @rfc.discover("BAPI_PAR_EMPLOYEE_CHECKEXISTEN")
    excheck.PARTNEREMPLOYEEID.value = @@partneremployeeid
    @rfc.call(excheck)
    @@customer = excheck.CUSTOMER.value
    assert( @@customer != nil)
    #puts "nCustomer Number: " + @@customer
    # Get Sales Areas
    getsalesareas = @rfc.discover("BAPI_CUSTOMER_GETSALESAREAS")
    getsalesareas.CUSTOMERNO.value = @@customer
    @rfc.call(getsalesareas)
    ret = getsalesareas.RETURN.value
    assert(ret['TYPE'] == 'S')
    getsalesareas.SALESAREAS.hashRows {|x| @@salesorg = x['SALESORG'] }
    assert(@@salesorg == '1000')
  end

  def test_CSC_00010_CustomerDetail
    customerdetail = @rfc.discover("BAPI_CUSTOMER_GETDETAIL2")
    customerdetail.CUSTOMERNO.value = @@customer
    @rfc.call(customerdetail)
    ret = customerdetail.RETURN.value
    assert(ret['TYPE'] != 'E')
    address = customerdetail.CUSTOMERADDRESS.value
    puts "nCustomer Name: " + address['NAME']
    assert( address['NAME'] != nil )
  end

  def test_CSC_00012_ContactDetail
    contactdetail = @rfc.discover("BAPI_BUSPARTNEREMPLOYE_GETLIST")
    idrange = contactdetail.IDRANGE.structure
    idrange.SIGN.value   = 'I'
    idrange.OPTION.value = 'EQ'
    idrange.LOW.value    = @@partneremployeeid
    contactdetail.IDRANGE.value = [ idrange.value ]
    @rfc.call(contactdetail)
    contactdetail.ADDRESSDATA.hashRows {
      |x|
      assert( x['LASTNAME'] != nil )
      puts "nContact last name: " + x['LASTNAME']
    }
  end

  def test_CSC_00015_ChangePassword
    # Change Password
    changepassword = @rfc.discover("BAPI_PAR_EMPLOYEE_CHANGEPASSWO")
    changepassword.PARTNEREMPLOYEEID.value = @@partneremployeeid
    changepassword.PASSWORD.value = @@password
    changepassword.NEW_PASSWORD.value = @@newpassword
    changepassword.VERIFY_PASSWORD.value = @@newpassword
    @rfc.call(changepassword)
    ret = changepassword.RETURN.value
    assert(ret['TYPE'] == 'S')
    # Back to default
    changepassword.PASSWORD.value = @@newpassword
    changepassword.NEW_PASSWORD.value = @@password
    changepassword.VERIFY_PASSWORD.value = @@password
    @rfc.call(changepassword)
    ret = changepassword.RETURN.value
    assert(ret['TYPE'] == 'S')
  end
  
  def test_CSC_00020_Salesorders
    # Salesorder List
    salesorderlist = @rfc.discover("BAPI_SALESORDER_GETLIST")
    salesorderlist.CUSTOMER_NUMBER.value = @@customer
    salesorderlist.SALES_ORGANIZATION.value = @@salesorg
    salesorderlist.TRANSACTION_GROUP.value = 0
    @rfc.call(salesorderlist)
    ret = salesorderlist.RETURN.value
    assert(ret['TYPE'] != 'E')
    salesorderlist.SALES_ORDERS.hashRows {|x| @sddoc = x['SD_DOC'] }
    assert( @sddoc != nil)
    puts "nSales Document Number: " + @sddoc
    # Salesorder
    salesorder = @rfc.discover("BAPISDORDER_GETDETAILEDLIST")
    view = salesorder.I_BAPI_VIEW.structure
    view.HEADER.value = 'X'
    view.ITEM.value = 'X'
    salesorder.I_BAPI_VIEW.value = view.value
    salesdocs = salesorder.SALES_DOCUMENTS.structure
    salesdocs.VBELN.value = @sddoc
    salesorder.SALES_DOCUMENTS.value = [ salesdocs.value ]
    @rfc.call(salesorder)
    salesorder.ORDER_ITEMS_OUT.hashRows {|x| @doc_number = x['DOC_NUMBER'] }
    assert( @sddoc == @doc_number )
  end
  
  def test_CSC_00030_MaterialDetails
    # Material Detail
    materialdetail = @rfc.discover("BAPI_MATERIAL_GET_DETAIL")
    materialdetail.MATERIAL.value = @@material
    @rfc.call(materialdetail)
    ret = materialdetail.RETURN.value
    assert(ret['TYPE'] == 'S')
    materialgeneral = materialdetail.MATERIAL_GENERAL_DATA.value
    @@unit = materialgeneral['BASE_UOM']
    assert( @@unit != nil)
    puts "nMaterial Unit: " + @@unit
  end

  def test_CSC_00040_Availability
    materialavailability = @rfc.discover("BAPI_MATERIAL_AVAILABILITY")
    materialavailability.MATERIAL.value = @@material
    materialavailability.UNIT.value = @@unit
    # Read Plants of Material
    materialplants = @rfc.discover("MATERIAL_READ_PLANTS")
    materialplants.MATNR.value = @@material
    @rfc.call(materialplants)
    # Check Availability for every Plant
    totalavailability = 0.0
    materialplants.PLANTS.hashRows {
      |x| 
      @plant = x['WERKS'] 
      materialavailability.PLANT.value = x['WERKS']
      @rfc.call(materialavailability)
      assert( materialavailability.AV_QTY_PLT.value != nil)
      totalavailability = totalavailability + materialavailability.AV_QTY_PLT.value.to_f
    }
    assert( totalavailability &amp;gt;= 0)
    puts "nAvailability total: " + totalavailability.to_s
  end
  def test_CSC_00050_Price
    salesordersimulate = @rfc.discover("BAPI_SALESORDER_SIMULATE")
    # Order Header
    orderheader = salesordersimulate.ORDER_HEADER_IN.structure
    orderheader.DOC_TYPE.value = 'AG'
    orderheader.SALES_ORG.value = @@salesorg
    # This is needed because of an error in saprf-0.18
    orderheader.REQ_DATE_H.value = '00000000'
    orderheader.PURCH_DATE.value = '00000000'
    orderheader.PRICE_DATE.value = '00000000'
    orderheader.QT_VALID_F.value = '00000000'
    orderheader.QT_VALID_T.value = '00000000'
    orderheader.CT_VALID_F.value = '00000000'
    orderheader.CT_VALID_T.value = '00000000'
    salesordersimulate.ORDER_HEADER_IN.value = orderheader.value
    # Order Items
    orderitems = salesordersimulate.ORDER_ITEMS_IN.structure
    orderitems.MATERIAL.value = @@material
    orderitems.REQ_QTY.value = '0000000001000'
    salesordersimulate.ORDER_ITEMS_IN.value = [ orderitems.value ]
    # Order Partners
    orderpartners = salesordersimulate.ORDER_PARTNERS.structure
    orderpartners.PARTN_ROLE.value = 'AG'
    orderpartners.PARTN_NUMB.value = @@customer
    salesordersimulate.ORDER_PARTNERS.value = [ orderpartners.value ]
    # Call Function
    @rfc.call(salesordersimulate)
    ret = salesordersimulate.RETURN.value
    puts "nReturn Message: " + ret['MESSAGE']
    salesordersimulate.ORDER_ITEMS_OUT.hashRows {
      |x|
      @@subtotal1 = x['SUBTOTAL1'].to_f
      @@subtotal2 = x['SUBTOTAL2'].to_f
      assert( 0 &amp;lt; @@subtotal1)
      assert( 0 &amp;lt; @@subtotal2 )
      assert( @@subtotal1 &amp;gt;= @@subtotal2 )
    }
    puts "nList Price: " + @@subtotal1.to_s
    puts "Net Price: " + @@subtotal2.to_s
  end
  
  def teardown
    @rfc.close()
  end
end
&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards&lt;/P&gt;&lt;P&gt;Gregor&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 23 Aug 2006 06:58:54 GMT</pubDate>
      <guid>https://community.sap.com/t5/additional-q-a/silly-question-about-rfc-for-ruby/qaa-p/1486743#M5021</guid>
      <dc:creator>gregorw</dc:creator>
      <dc:date>2006-08-23T06:58:54Z</dc:date>
    </item>
    <item>
      <title>Re: Silly question about RFC for Ruby...</title>
      <link>https://community.sap.com/t5/additional-q-a/silly-question-about-rfc-for-ruby/qaa-p/1486744#M5022</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanx &amp;lt;b&amp;gt;Piers&amp;lt;/b&amp;gt;, you got my question right -;) Thanx for the example...But...Gregor code is far more complete -:D So I must give him the 10 points...sorry -:)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Greetings,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Blag.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 23 Aug 2006 13:34:23 GMT</pubDate>
      <guid>https://community.sap.com/t5/additional-q-a/silly-question-about-rfc-for-ruby/qaa-p/1486744#M5022</guid>
      <dc:creator>Former Member</dc:creator>
      <dc:date>2006-08-23T13:34:23Z</dc:date>
    </item>
  </channel>
</rss>

