Quantcast
Channel: SCN : All Content - Scripting Languages
Viewing all 522 articles
Browse latest View live

Transfer Data From Excel to SAP

$
0
0

Hi Team,

 

While working on T-code VA02 i want to transfer the values provided in Excel to SAP.

think i got values in a1, b1 and so on..by name Billing plan,Value

I want to go to   the line item  and then the billing tab and under that tab the values should be entered based on the Excel Column names.

and in SAP  to go to next line item i am using Shift+ F7 to go up..it should go automatically till the value is blank..Please do let me know how ?

 

Also after updation i want to add/delete a specific column only.. Is it possible..


RFC call from Excel using VBA

$
0
0

I am trying to do an RFC call from Excel to SAP using VBA. RFC is working fine for most the RFC enabled Function Modules except DDIF_FIELDINFO_GET and DDIF_FIELDLABEL_GET.

 

What can be the reason for this?

 

Can someonme please help me with a macro code where these FMs are working.

 

Also can someone please help me with some tutorial on SAP connection with Excel.

 

<REMOVED BY MODERATOR - REQUEST OR OFFER POINTS ARE FORBIDDEN>

 

Edited by: Alvaro Tejada Galindo on Nov 12, 2008 9:14 AM

Macro error interfacing with SAP after Window 7 Update

$
0
0

I've created a macro in Excel that opens SAP, and downloads a number of different reports. It was working fine last week, but after an update to Windows 7 from xp (and excel 2007 to 2010), I now receive the following error during a loop in my code:


Run-time error '619'

The control could not be found by id


I have no idea what change could have caused this. If anyone has any ideas I would really appreciate it!

The error occurs at the following line:

session.findById("wnd[0]/usr/cntlGRID1/shellcont/shell/shellcont[1]/shell[1]").setDocument 1, ""


The loop is here:

For i = StartPeriod To 13

     session.findById("wnd[0]/usr/txt[7]").text = "201" & Ye

     session.findById("wnd[0]/usr/txt[9]").text = "201" & Ye

     session.findById("wnd[0]/usr/txt[11]").text = i

     session.findById("wnd[0]/usr/txt[13]").text = i

     session.findById("wnd[0]/usr/ctxt[0]").caretPosition = 9

     session.findById("wnd[0]/tbar[1]/btn[8]").press

     session.findById("wnd[0]/tbar[1]/btn[45]").press

     session.findById("wnd[1]/usr/sub/2/sub/2/1/rad[1,0]").select

     session.findById("wnd[1]/usr/sub/2/sub/2/1/rad[1,0]").setFocus

     session.findById("wnd[1]/tbar[0]/btn[0]").press

     session.findById("wnd[1]/usr/ctxt[0]").text = OutputFilePath

     session.findById("wnd[1]/usr/ctxt[1]").text = "Y1" & Ye & "P" & i & ".txt"

     SendKeys "~", True

     session.findById("wnd[0]/usr/cntlGRID1/shellcont/shell/shellcont[1]/shell[1]").setDocument 1, ""

     session.findById("wnd[0]/tbar[0]/btn[3]").press

     If Ye <> CurrentYe And i = 13 Then

          i = 0

          Ye = Ye + 1

     End If

     If Ye = CurrentYe And i = PeriodUsed Then GoTo Line91

Next i

CCo (COM Connector) for SAP NetWeaver RFC Library for Scripting Languages

$
0
0

Hello community,

 

SAP offers different connectors to develop ABAP compatible components and applications. JCo for Java environments, NCo for dotNET languages and the NetWeaver RFC SDK for C++. But what's up if you work neither with Java or dotNET environments nor with C++?

 

Here is another alternative, CCo - the COM Connector for SAP. CCo is a COM library and offers wrappers around all functions of the SAP NetWeaver RFC library. So it is possible to use all functionalities of the SAP NetWeaver RFC library inside any language which support COM technic.

 

With CCo it is easily possible to use the SAP NetWeaver RFC functions inside VBScript, Visual Basic for Applications (VBA) or AutoIt script.

 

Here a VBScript example to connect an SAP system:

 

'-Begin-----------------------------------------------------------------

  '-Directives----------------------------------------------------------
    Option Explicit


  '-Variables-----------------------------------------------------------
    Dim SAP, hRFC, rc


  '-Main----------------------------------------------------------------

    Set SAP = CreateObject("COMNWRFC")
    If IsObject(SAP) Then

      SAP.About

      hRFC = SAP.RfcOpenConnection("ASHOST=ABAP, SYSNR=00, " & _

        "CLIENT=001, USER=BCUSER")


      If hRFC Then
        MsgBox "Check connection with TAC SMGW in the SAP system"
        rc = SAP.RfcCloseConnection(hRFC)
      End If
      Set SAP = Nothing
    End If

'-End-------------------------------------------------------------------

 

Here a VBA example to ping an SAP system:

 

'-Begin-----------------------------------------------------------------


  Option Explicit


  '-Constants-----------------------------------------------------------

    Const RFC_OK = 0


  '-Sub Ping------------------------------------------------------------

    Sub Ping()
 
      '-Variables-------------------------------------------------------
        Dim SAP As CCo.COMNWRFC
        Dim hRFC As Long
        Dim rc As Integer
        Dim hFunc, hFuncDesc As Long


      Set SAP = CreateObject("COMNWRFC")

      If IsObject(SAP) Then
 
        hRFC = SAP.RFCOPENCONNECTION("ASHOST=ABAP, SYSNR=00, " & _

          "CLIENT=001, USER=BCUSER")
        If hRFC Then
       
          '-Variant1----------------------------------------------------
            hFuncDesc = SAP.RFCGETFUNCTIONDESC(hRFC, "RFC_PING")
            If hFuncDesc Then
              hFunc = SAP.RFCCREATEFUNCTION(hFuncDesc)
              If hFunc Then
                If SAP.RFCINVOKE(hRFC, hFunc) = RFC_OK Then
                  Debug.Print "Ping successful"
                Else
                  Debug.Print "Ping not successful"
                End If
                SAP.RFCDESTROYFUNCTION hFunc
              End If
            End If
         
          '-Variant2----------------------------------------------------
            If SAP.RFCPING(hRFC) = RFC_OK Then
              Debug.Print "Ping successful"
            Else
              Debug.Print "Ping not successful"
            End If
       
          rc = SAP.RFCCLOSECONNECTION(hRFC)
        End If
        Set SAP = Nothing
   
      End If
     
    End Sub

'-End-------------------------------------------------------------------

 

 

To the duality of accesses via SAP GUI Scripting and RFC with scripting languages

ScriptStructure1.jpg

 

CCo opens a powerful second channel to communicate with an SAP backend. You can code in your favorite COM-enabled scripting language and use two ways: on the one hand the SAP GUI Scripting to communicate via SAP GUI for Windows with an SAP system, and on the other hand the COM Connector (CCo) to communicate via SAP NetWeaver RFC library with an SAP application server.

CCo is an ideal complementation to SAP GUI Scripting in this application area. You can e.g. use the wide range of thousands of remote-enabled function modules from an SAP system. Use the transaction code BAPI to open the BAPI explorer and find a lot in the alphabetical hierarchy tree.

Enrich your SAP GUI Scripting operation processes. Get information easy and fast via CCo RFC interface in your scripting environment. Combine the best of both worlds.

 

 

Hint: CCo has at the moment experimental character. Don't use it in production environments.

 

Hint: CCo needs SAP RFC SDK, you find it here.

 

Download

You find CCo here: http://cco.stschnell.de

 

 

2013/08/02:

  • New Version 0.8 is available.
  • External functions to register and unregister the library without admin rights.
  • All connection parameters are now in string format, for maximum flexibility.
  • 89.5% of all methods doesn't need pointers.
  • For all other methods I implement AllocateMemory, FreeMemory and Peek and Poke functions.
  • With this version it is possible to use all functions of SAP RFC library.

 

 

Comments are welcome.

 

Cheers

Stefan

Save roport as file via Windows explorer

$
0
0

Dear comunity,

does any boby know, how can i save report  report ZC90 via Win Explorer.

i'm tried to record macro by SAP macro recorder but unsucessfull.

only one row recordered

 

session.findById("wnd[0]/tbar[1]/btn[8]").press

 

 

 

zc90.PNG

If nothing to pullout in sap

$
0
0

Hi everyone,

 

I have an inquiry on my project. I recorded a script that it will pull out the information I needed in every country we handle. But I dunno how to set if error message to my script.. after DO_QUERY to sap then error message pop up.... Its because nothing to pull out no data from that country that I need.

 

Can you please help me with do_query result is blank then Message SAP did not pull out anything from COUNTRY

 

session.findById("wnd[0]/usr/cntlCLFRM_CONTAINER/shellcont/shell/shellcont[1]/shell/shellcont[0]/shell/shellcont[1]/shell").pressButton "DO_QUERY"

 

after that line...

 

 

Thanks

Tina

How to read the record file programmatically

$
0
0

Hi all,

I'm new to SAP and SAP GUI Scripting.

 

I've 2 questions that need your expertise to enlighten me.

 

1. session.RecordFile = "myfile"                <- this will created under SapWorkDir

Q: Is there a way to know exact directory based on the variable SapWorkDir without hardcode it?

I need to use program to read this "myfile". Main reason no hardcode, I may have different SAP Gui Clients on different environments (XP, Win7 etc)

 

2. If above solution does not work

I know another alternative, using "_Change" event to record it myself. Is there any good sample?

 

Hope i can get some hints from you guys.

 

Cheers

Sato

Not able to display data from standard table in SAP Script

$
0
0

Hello Experts ,

 

I am trying to display Account information in SAP Script , but it is not showing up any values. Please let me know where all to put breakpoints for debugging it , as i m new to SAP Scripts.

 

Thanks in advance,

 

Best Regards,

Nikhil Kulkarni


How to connect SAP using VBA code?

$
0
0

Hi Experts,

 

Could you please anyone provide the VBA code to connect SAP through EXCEL.

 

 

 

 

 

Thanks in advance.

Arun

T-code KSII script need further help

$
0
0

Hi, i recently posted discussion "T-code KSII script post despite errors".  I have a follow-on question. Sometimes, when i try to post data, there are errors, so I have this code: 'This posts the data despite the errors If session.findById)"wnd[1]/usr/txtSPOP-TEXTLINE1").text = "Do you want to post data despite errors" Then session.findById("wnd[1]/usr/btnSPOP-OPTION1").press End If 'This selects the enter button when a pop-up box comes up to tell you that the data has been posted If session.findbyId("wnd[1] /usr/txtMESSTXT2").txt = "Data has been posted" Then session.findById("wnd[1]/tbar[0]/btn[0]").press But, when i try to post the data that doesn' t have "errors", the first pop-up box that says "Do you want to post data despite errors" does not pop-up.  Which means that only the second pop-up box comes up ("Data has been posted"). How can i edit the code to take care of both situations? I tried this: If session.findById("wnd[1]/usr/txtSPOP-TEXTLINE1").text = "Do you want to post data despite errors" Then session.findById("wnd[1]/usr/btnSPOP-OPTION1").press Else If session.findById("wnd[1]/usr/txtMESSTXT2").text = "Data has been posted" Then session.findById("wnd[1]/tbar[0]/btn[0]").press End If But it didn't work. Can anybody help?! Thanks, Chrissy

SAP Script Record VB -> Start from MS Access

$
0
0

Hello,

 

this is the first time i try to  handle some actions from MS Access to SAP.

I have tried to record a script with the SAPGUI Script recorder. The Script works fine. I start it with the playback funktion (ALT + 12 -> record and playback) of SAP.

 

So the idea is now to start that vb script from my MS Access form by clicking a single button. Because starting the script by pressing ALT + F12 -> record and playback function -> searching the right vb file -> and pressing the green play Button take to much time in my opinion.

 

Would that be possible?

 

I have no idea how i could handle this?

 

Thanks for help!

Set the "Not Equal" selection option for GuiCTextField

$
0
0

I'm writing the script in AutoIt, but this is more of a general question.

 

Relevant parts of script:

$sess.SendCommand("/nSE16")

$sess.ActiveWindow().FindByID("usr/ctxtDATABROWSE-TABLENAME").Text = "MAPL"

$sess.ActiveWindow().FindByID("usr/ctxtI2-LOW").Text = "1000"

$sess.ActiveWindow().FindByID("usr/ctxtI3-LOW").Text = "N"

$sess.ActiveWindow().FindByID("usr/ctxtI11-LOW").Text = "X"

$sess.ActiveWindow().FindByID("tbar[1]/btn[7]").Press()

$sess.ActiveWindow().FindByID("tbar[1]/btn[8]").Press()

_SaveLocalFile($mypath, "CRHD.txt")

$sess.ActiveWindow().SendVKey(12)

$sess.ActiveWindow().SendVKey(12)

 

I need to set the usr/ctxtI11-LOW to "Not Equal X".  I can do this, but I was wondering if there was an option I was missing.

;~  vvvvv Is there an easier way to do this?

$sess.ActiveWindow().FindByID("usr/ctxtI11-LOW").Text = "X"

$sess.ActiveWindow().findById("usr/btn%_I11_%_APP_%-VALU_PUSH").press

$sess.ActiveWindow().findById("usr/tabsTAB_STRIP/tabpSIVA/ssubSCREEN_HEADER:SAPLALDB:3010/tblSAPLALDBSINGLE/btnRSCSEL-SOP_I[0,0]").press

$sess.ActiveWindow().findById("usr/cntlOPTION_CONTAINER/shellcont/shell").currentCellRow = 5

$sess.ActiveWindow().findById("usr/cntlOPTION_CONTAINER/shellcont/shell").selectedRows = "5"

$sess.ActiveWindow().findById("usr/cntlOPTION_CONTAINER/shellcont/shell").doubleClickCurrentCell

;~  ^^^^^ Is there an easier way to do this?

VBS Script: Wait, Pause, Sleep

$
0
0

Dear EXperts,

 

Newbie here.

I was able to record something (picking progress in TC LT45) and thus generate a VBS file.

Now, running this script is doing what it should do, except for the timing: It runs way too fast and therefore I am searching for adding some command/code to pause.

I found examples like Application.Wait("0:00:1000") but SAP does not like that.

See 'my' code below.

 

Any answer will be appreciated.

Thanks, Nick

 

If Not IsObject(application) Then

   Set SapGuiAuto  = GetObject("SAPGUI")

   Set application = SapGuiAuto.GetScriptingEngine

End If

If Not IsObject(connection) Then

   Set connection = application.Children(0)

End If

If Not IsObject(session) Then

   Set session    = connection.Children(0)

End If

If IsObject(WScript) Then

   WScript.ConnectObject session,     "on"

   WScript.ConnectObject application, "on"

End If

session.findById("wnd[0]").resizeWorkingPane 263,47,false

session.findById("wnd[0]").sendVKey 8

Application.Wait("0:00:1000")

session.findById("wnd[0]").sendVKey 3

session.findById("wnd[0]").sendVKey 8

Application.Wait("0:00:5000")

session.findById("wnd[0]").sendVKey 3

session.findById("wnd[0]").sendVKey 8

Application.Wait("0:00:1000")

session.findById("wnd[0]").sendVKey 3

session.findById("wnd[0]").sendVKey 8

session.findById("wnd[0]").sendVKey 3

session.findById("wnd[0]").sendVKey 8

session.findById("wnd[0]").sendVKey 3

 

Edited by: N. Lagace on Mar 8, 2012 1:37 PM

BAPI_SALESORDER_CREATEFROMDAT2 and BAPI_TRANSACTION_COMMIT in php

$
0
0

Hi,

 

I'm trying to create salesorder in php with rfc BAPI_SALESORDER_CREATEFROMDAT2. I call it through webservice with php soap call. It works ok as I get response that order created with some number. However order is not created in sap. I also run BAPI_TRANSACTION_COMMIT but with no help.

 

I have found some description about the issue describing createTID or session locking in bc, but it didn't help.

 

Question is how can it be done in php? I'know it's possible to create z_rfc to run both but it should also be possible to run both create and commit in php as well.

(I have r/3 4.7/6.20)

 

I'd appreciate a lot any insight into this,

 

erki

parameters sintax for BAPIs in PHP?

$
0
0

Hi,

 

can someone help me with the parameters sintax for these bapis (bapi_salesorder_createfromdat2 and bapi_transaction_commit) in PHP?

 

More details ...

I wrote a PHP script calling thats bapis, I sent the values in arrays. When I ran the script I got any error, but it shows a list of empty data and at the bottom the follow messages:

No errors detected.

 

call function 'BAPI_TRANSACTION_COMMIT' successfull.

 

But there is no sales order created in the database.

 

I think, the sintax for the parameters are wrong or maybe all my logic

 

 

Attach files: My PHP script and a  file with the output of the execution (please change the extensions

 

I'm using wampserver 2.2 installed locally ( apache 2.2.21 - PHP 5.3.8 ) my SAP QAS is in Oracle.

 

thanks

 

-- sorry for my pour english --


How to close SAP, independent from the SAP state

$
0
0

Hello,

 

i am looking for a way to close SAP with a VBA Script, independent from the SAP state.

 

Sometims a SAP table is open. Then the code works fine without an error, but SAP dossn't close.

 

Thank you for your Support

 

 

my code:

 

 

If SAP_GUI_APP Is Nothing Then
    Set SAP_GUI_APP = CreateObject("Sapgui.ScriptingCtrl.1")
End If

 

 

If Connection Is Nothing Then
    Set Connection = SAP_GUI_APP.OpenConnection("XYZ", True)
End If

 

If session Is Nothing Then
    Set session = Connection.Children(0)
End If

 

If IsObject(WScript) Then
    WScript.ConnectObject session, "on"
    WScript.ConnectObject Application, "on"
End If

 

and so on...

 

If sbar.text <> "" Then GoTo FEHLER

 

fehler:

 

Set sbar = Nothing

Set WScript = Nothing

Set session = Nothing

Set Connection = Nothing

Set SAP_GUI_APP = Nothing 

end sub

How to get Transaction Name

$
0
0

Hi all,

Let say the script

session.Info().Transaction <- this gives you the transaction code. How about name?

Eg. SU3 - Maintain User Own Data

 

Possible? I search through the API could not find any.

 

Cheers

Sato

How to use Freestyle BASIC Script Language (FBSL) inside ABAP

$
0
0

Hello community,


in this forum we only discus how to connect SAP from different scripting languages. We never talk about the possibility how to use a scripting language from the SAP side. I published a little bit in 2009 about this theme in my blog with AutoItX. But AutoItX, the ActiveX component of Autoit, is, compared with AutoIt, restricted in its functionality. Now from this point I want to introduce another brilliant script language: Freestyle BASIC Script Language.

 

Freestyle BASIC Script Language (FBSL) is a multi-syntax all-in-one high-level language (HLL) development environment. Its interpretative layer is a vastly extended superset of traditional BASIC that targets seamless integration of FBSL applications with Windows API and third-party dynamic link libraries. Its integrated Dynamic Assembler and Dynamic C JIT compiler layers enable the user to interleave BASIC code with verbatim Intel-style assembly and ANSI C, respectively. You can find FBSL here.

 

To use FBSL inside ABAP I build an ActiveX library, called FBSLX. FBSLX contains wrapper functions around the library FBSL.dll. With FBSLX you have the possibility to use FBSL inside any language which is COM-enabled, also ABAP. The integration of FBSL insisde ABAP offers inter alia the possibilities to use on the presentation server easily

  • API/DLL functions,
  • a console window for input and/or output,
  • a GUI window,
  • memory functions,
  • memory map files for interprocess communication (IPC),
  • etc. etc. etc.

You can find FBSLX here.

 

Here an example how easy it is to use FBSL inside ABAP:

 

"-Begin-----------------------------------------------------------------
  Program ZFBSL.

 

    "-Constants---------------------------------------------------------
      Constants CrLf(2) Type c Value %_CR_LF.

 

    "-Variables---------------------------------------------------------
      Data oFBSL Type OLE2_OBJECT.
      Data Buffer Type String Value ''.
      Data rc Type i.
      Data RetVal Type i.

 

    "-Macros------------------------------------------------------------
      Define _.
        Concatenate Buffer &1 CrLf Into Buffer.
      End-Of-Definition.

 

      Define Flush.
        Call Function 'AC_SYSTEM_FLUSH' Exceptions Others = 1.
      End-Of-Definition.

 

    "-Main--------------------------------------------------------------
      Create Object oFBSL 'FbslX'.

      If sy-subrc <> 0 Or  oFBSL-Handle = 0 Or oFBSL-Type <> 'OLE2'.
        Call Function 'ZFBSL'.
        Call Function 'ZFBSLX'.
        Create Object oFBSL 'FbslX'.
      EndIf.

 

      If sy-subrc = 0 And oFBSL-Handle > 0 And oFBSL-Type = 'OLE2'.

 

"-FBSL script begin-----------------------------------------------------

 

_ '#Uses "@|WIN32"'.
_ '#Option Strict'.
_ '#AppType GUI'.

 

_ 'Dim %rc'.
_ 'rc = Msgbox(Null, "Message", "Title", MB_ABORTRETRYIGNORE)'.
_ 'Return rc'.

 

"-FBSL script end-------------------------------------------------------

 

        "-Here we execute the script------------------------------------
          Call Method Of oFBSL 'ExecuteScriptBuffer' = rc
            Exporting #1 = Buffer.
          Flush.

 

        "-Here we get the return value of the script--------------------
          Call Method Of oFBSL 'GetReturnValueInteger' = RetVal.
          Flush.

 

        Write: RetVal.

 

        Free Object oFBSL.

      EndIf.

 

"-End-------------------------------------------------------------------

 

You find more examples here:

Different Return Values

Simple console window

Simple GUI window

UDT return value

Array return value

GL3DRose in SAP context (This is an impressive OGL example)

 

FBSL offers a lot of new possibilities to integrate the presentation server in the context of ABAP on the application server. To implement FBSL complete in the ABAP context I use BinFile2ABAP, it works excellent.

 

Visit FBSL, comments are welcome.

 

Enjoy it.

 

Cheers
Stefan

Scripting to view changes in Order

$
0
0

Hi Experts,

 

I'm new here and I need your help.

I've created an script to save a file with changes in order.

The script works fine, but i need to know, if it´s possible get this information from a list of orders (Excel or access)?

I also need to know if it´s possible to save on the same file the informations from diferent orders.

 

 

 

 

If Not IsObject(application) Then

   Set SapGuiAuto  = GetObject("SAPGUI")

   Set application = SapGuiAuto.GetScriptingEngine

End If

If Not IsObject(connection) Then

   Set connection = application.Children(0)

End If

If Not IsObject(session) Then

   Set session    = connection.Children(0)

End If

If IsObject(WScript) Then

   WScript.ConnectObject session,     "on"

   WScript.ConnectObject application, "on"

End If

session.findById("wnd[0]").maximize

session.findById("wnd[0]/tbar[0]/okcd").text = "va03"

session.findById("wnd[0]").sendVKey 0

session.findById("wnd[0]/usr/ctxtVBAK-VBELN").text = "1009023776"

session.findById("wnd[0]").sendVKey 0

session.findById("wnd[0]/mbar/menu[4]/menu[3]").select

session.findById("wnd[0]/usr/radSDATE").select

session.findById("wnd[0]/usr/radSDATE").setFocus

session.findById("wnd[0]/tbar[1]/btn[8]").press

session.findById("wnd[0]/mbar/menu[3]/menu[5]/menu[2]/menu[2]").select

session.findById("wnd[1]/usr/subSUBSCREEN_STEPLOOP:SAPLSPO5:0150/sub:SAPLSPO5:0150/radSPOPLI-SELFLAG[1,0]").select

session.findById("wnd[1]/usr/subSUBSCREEN_STEPLOOP:SAPLSPO5:0150/sub:SAPLSPO5:0150/radSPOPLI-SELFLAG[1,0]").setFocus

session.findById("wnd[1]/tbar[0]/btn[0]").press

session.findById("wnd[1]/usr/ctxtDY_FILENAME").text = "testemodificacao.xls"

session.findById("wnd[1]/usr/ctxtDY_FILENAME").caretPosition = 20

session.findById("wnd[1]/tbar[0]/btn[11]").press

session.findById("wnd[0]/tbar[0]/btn[15]").press

session.findById("wnd[0]/tbar[0]/btn[15]").press

session.findById("wnd[0]/tbar[0]/btn[15]").press

 

Tks

Excel VBA SAP logon pad

$
0
0

Hello,

 

I have successfully written VBA code to emulate user interaction with SAP on one "system".  However when i want to switch over to another SAP system i have been unsuccessful.  I may be using the wrong terminology referring to the systems, for example, on the SAP logon pad 710 i have a list of 56 system's i can log in to.  I only use two of those systems, one is called SAP ECC production [BH1] and the other is called SAP SCM 5.0 Production [BA1].  in the middle of my code i would like to switch over to the second system (SAP SCM 5.0) but i have not been able to do it.  Any help would be tremendous!  Thank you

Viewing all 522 articles
Browse latest View live