Friday, October 14, 2011

VPN: How to access both internet and company network on XP

I used to connect to my company's network via a PPP VPN. As I have now left that company I thought I would document the way I connected to the VPN network and the internet (when connected to the VPN).

*now I must state that the company did have an VPN connections via Watchdog ssl connections and using this connection I was always able to connect to the compnay network and the internet. However this Watchdog VPN SSL connection proved unreliable for me and therefore I used the backup PPP connection as follows.

Change the VPN settings to disable the gateway on the remote network as shown below.

Then CONNECT to the VPN

The internet should be available however the company network is NOT!!!

So, using the windows command IPCONFIG command check the last number of the VPN connection. shown here

Then using a BAT file to setup the connections for the company network.

I called mine vpnroutes.bat

C:\Documents and Settings\robert.russell\Desktop>type vpnroutes.bat
route add X.X.X.0 MASK 10.175.2.%1%
route add X.X.0 MASK 10.175.2.%1%
route add X.X.X.0 MASK 10.175.2.%1%

*replace the X.X.X with the IP addresses of the company networked servers.

Then running the vpnroutes.bat file with the last number of the IP address,

vpnroutes 17
*using the example from the screen shot above.

Wednesday, October 12, 2011

Printing Barcodes for FREE with SAP

Now introducing the Barcode Writer in Pure Postscript (BWIPP) on the SAP server side
Version 3

Using the BWIPP script on the SAP Server Side

This version merges the BWIPP on the SAP server side. Therefore there is no need to configure PDF software or use scripts to introduce the BWIPP to generate barcodes.

By using standard SAP configuration the BWIPP can be merged into the SAP output stream on the server side. Therefore reducing any configuration on the client side.

Also as the solution is purely postscript based ANY postscript 2 compatible printer can be used for a barcode solution. See my earlier post in regards to printing postscript on HP printers

Steps involved.

ZBWIPP_M.PRI This is the SAP device type which contains the BWIPP configuration
Dbwipp This file is the Barcode Writer in Pure Postscript
ZBWIPP_PRINT.txt This is the ABAP code which produces 26 barcodes on one page

The test page looks like this.

2) SET the profile parameter 'rspo/devinit/datafile' to

rspo/devinit/datafile =

Note: Please pay attention to the number of "+" after the letter "D".
*Its important the the parameter is set exactly as above

3) Copy the Dbwipp file to the following directory on the SAP server

*the parameter and Dbwipp file need to be set/copied to all application servers used for printing.

4) RESTART the application server

Import device type = ZBWIPP_M.PRI
Use ABAP code = ZBWIPP_PRINT.txt

*the output device qrcodes and cutepdf setup can be used as stated in the blog post. (They can be renamed as required)

Run the report ZBWIPP_PRINT for the demo ABAP code.

Here is a video covering barcodes in SAP Smart Forms with the BWIPP.

Previous Versions
Version 1

SAP: 26 different barcodes on a page with 1 ABAP report for FREE

This version relied on merging the the Barcode Writer in Pure Postscript (BWIPP) being with the SAP output on the desktop by using scripts.

Version 2
This version relied on merging the the Barcode Writer in Pure Postscript (BWIPP)  with the SAP output on the desktop by using PDF software configuration.

Tuesday, October 11, 2011

SAP: New version of the SAP QR code device type

In my original development of the SAP barcode device types based on the Barcode Writer in Pure Postscript (BWIPP) it was suggested to use the BWIPP ASCII85 encoded versions. The ASCII85 BWIPP versions can be found here. 

I do like the ASCII85 encoding method as it reduces the amount of code and therefore the size of the SAP device type.

The new device type also contains two extra print controls to cover some extra formatting options for smartforms. Read the SDN blog regarding the implementation and the comments section of the blog does contain some fixes for using the device type in smartforms.

Download link to the new QR code device type is here

The zip file contains file ZBWPQR2.PRI which is the ZBWPQR2 device type.
Follow the original QRcode blog but use the ZBWPQR2 device type

The main benefits are reducing the number of SAP Action pages required for the device type.
The actual reduction in size of the postscript sent to the frontend/printer.
The extra print controls covering Smart Form formatting.

The following extract is from the Barcode Writer in Pure Postscript page detailing all the supported barcodes. Using the same method any of these could be incorporated into an SAP device type. If you see any you would want to use in SAP then you could follow the SDN blog to create your own or let me know via the comments if you would want me to help out in creating any of the SAP device types.

"The project supports all major barcode formats including:
EAN-13EAN-8UPC-AUPC-EISBNISMNISSNEAN-5 & EAN-2 (EAN/UPC add-ons), GS1 DataBar OmnidirectionalGS1 DataBar StackedGS1 DataBar Stacked OmnidirectionalGS1 DataBar TruncatedGS1 DataBar LimitedGS1 DataBar Expanded,GS1 DataBar Expanded StackedCode 128GS1-128 (EAN-128), SSCC-18 (EAN-18, NVE), EAN-14 (DUN-14), GS1 Composite(EAN/UPC, GS1 DataBar and GS1-128), Code 39Code 39 ExtendedCode 93Code 93 ExtendedCode 32 (Italian Pharmacode),Pharmazentralnummer (PZN), Interleaved 2 of 5ITF-14 (UPC SCS), Code 2 of 5 (Industrial, IATA, Matrix, Datalogic & COOP), Code 11 (USD-8), Codablock FCode 16KCode 49Code OneBC412Codabar (NW-7), Pharmacode (including two-track), MSI modified PlesseyPlessey UKTelepen (including numeric), Channel CodePosiCodePDF417MicroPDF417Data MatrixGS1 DataMatrix,QR Code (including Micro QR Code), MaxiCodeAztec CodeUSPS Intelligent MailUSPS POSTNETUSPS PLANETRoyal Mail(RM4SCC), KIX (Dutch Postal), JapanPostAusPostDeutsche Post IdentcodeDeutsche Post LeitcodeUSPS FIM symbolsDAFT,RawFlattermarkenHIBC barcodes (Code 39, Code 128, Data Matrix, PDF417, MicroPDF417, QR Code, Codablock F)"

Monday, October 10, 2011

SAP: Printing(PDF) QRcodes with the SAP Japanese postscript device type

Following up on my previous blog How to Print(PDF) QR Codes in standard SAP 

As I did come across QR codes in Japan I thought I would blog on how to use the Japanese postscript device type driver with QR codes. It should be noted the QRcode in the Barcode Writer in Pure Postscript (BWIPP) does not support kanji (yet). See the BWIPP outstanding  features list for the to-do list for QR codes. Check with the BWIPP project if you want to request/support any new features in the actual barcode.

So the intention of the post is to show the way to use Japanese in the output including a QRcode.

If you used Japanaese in the original method then the cutepdf output would look like the following screenshot.

So to get Japanese to print properly then the SAP Postscript font file from this note is required.

Note 83502 - Printing Support for Native Languages

Download the Japanese font file "Japanese  |  JPSPOST    | Dfnsjis  (note 83502)"

Follow the note to set the required parameter and upload the font to the SAP server.
*Check the limitations of using these device types in the note and that the font file will be sent to the frontend with each print.

The end result when using the QRcode enabled device type.

Smartform Example. 

Steps involved.

1) Downloaded the font file and set the parameter from the SAP note. Restart the SAP server

2) Download here  the zip file which contains the following files.
ZQR_PRINT_JP.txt     = ABAP code to produce a QRcode using the ZJPSPTQR device type.
ZBWIPP_JAPAN        = Output Device linking the device type to cutepdf desktop printer
ZJPSPTQR.PRI           = QRcode enabled SPOST Device Type

3) Use the original post in relation to the QRcode but use the above files to enable Japanese.

4) Run report ZQR_PRINT_JP (and make sure the print immediately is active).

Thai Language Support
In the comments section there is a question about using QRcodes and Thai Language support. By modifying the Thai device type that you can download in the note 83502 I was able to print Thai and the QRcode as shown below. I did rely on Google for the translation so hopefully it is translated appropriately....:)

Wednesday, October 5, 2011

SAP: Troubleshooting QR codes in Smart Forms (and BWIPP barcodes)

Printing QR codes (or many other types of barcodes) in smartforms is possible by using the Barcode Writer in Pure Postscript.

Check out these blogs for further information and background to printing QRcodes/barcodes in SAP.
SDN Blog Barcode in SAP with the Barcode in Pure Postscript
Overview of BWIPP in SAP 

Two general issues have come up in printing QRcodes in smartforms. Both relate to the text intended for the barcode being shown on the page and the QRcode/barcode generated but blank (and unreadable). So I will cover the fix for both issues below.

1) Smartform Print contol missing.

As covered in the comments section of the SDN blog 

Check the raw format of the spool request. (send the print to the spool and not print immediately)

In SP01 when viewing your output requests, select on the menu screen, 'Goto' --> 'Display Requests' --> 'Settings', and select RAW format. and search for ZBW01 and ZBW02  then print control ZBW01 may not show up. For testing purposes swap out the device type and print controls for SAP standard and see if they appear.

The work around/fix was as follows.
In the smartform the setup was as below and did not create a proper barcode.

Turns out the missing print control occurs even with SAP standard print controls so is a smartform issue/feature and not related to the device type.

So the fix

Change to
..TEXT - empty / or blank lines to make room for the barcode

The above issue is normally only related to text boxes in a loop as standalone text boxes work as standard.

2) Format used in the text box for the barcode

There is a section in the SDN blog about "Identify the Text for the Barcode" so if I print the relevant section below.

"Standard formatted text can appear with the "s" command however sometimes especially if small text formatting is used other postscript procedures such as "w1" and "w2" appear. So any new form or output that requires a barcode should be output to a flat file. This is to check the file for the postscript formatting and commands used by SAP. This can be useful to note where to insert postscript commands via print controls (also for any trouble shooting). A tip for smartforms and sapscript is to search for lines with "<~" and "~>" as this signals ASCII85 encoded text. "

As the smartform will be converted to postscript then the way the smartforms text format is converted is vital to allow the barcode to be printed.

a) So lets start by creating a Windows frontend printer that prints purely text.
This will be used to create a text file of the SAP generated postscript.

Follow this note but use the QRcode/barcode device type 
 Note 576973 - Creating a file printer on a Windows PC

b) send the smartform to the new frontend printer. 
You will be prompted for a file location so enter c:\ for example (the full path must be entered).

c) open and search for /s {bct exch ctxt  which is the start of print control ZBW01.

In your smartform there is some formatting to do with the width/size of the text so the normal postscript s command is not used and therefore the qrcode is not displayed correctly.

*NOTE, in the following example I will use postscript w1 and w2 as an example, the exact formatting may be different in your smartform, leave a comment and I will get back to you.

Here is an extract of some formatting I tested with a copy of the SF_EXAMPLE_01 smartform.

Screenshot of Smartform Formats used in a Text Box

Screenshot of the Postscript code generated by SAP for the smartform
*Note I have added the ASCII85 decoded text myself to show in this example.

Note the only line not using the postscript s command is the "small key word" text which uses the w1 and w2 postscript commands

The postscript commands w1 and w2 are used instead of the S command. Therefore to keep the formatting in the smartform we can add two new print controls.

d) Modify the QRcode/barcode device type in transaction SPAD.
Add print controls 

ZBW90 = /w1 {bct} def \n/w2 {ctxt /bct exch def} def\n
ZBW91 = /w1 {SW 0 8#040} def \n/w2 {widthshow} def \n

e) Change the smartform to include the new print controls

..TEXT - empty / or blank lines to make room for the barcode

Basically the ZBW90 changes the W1 and W2 commands to allow the concatenation of the text.
ZBW02 is the same command to generate the QR code.
ZBW91 resets the W1 and W2 to SAP standard postscript.

f) Print the smartform to the original QRcode(barcode) printer.

Any comments let me know happy to help.

Thursday, September 29, 2011

Mapping links using Excel macros and Google map charts

Thematic mapping bitly links with Excel and Google charts.

I have created some SAP barcode device types that can be downloaded for free. See this link for my SAP Barcode device types Using the BIT.LY service for these downloads I do know that they have been downloaded in many countries. So as I do have an interest in thematic maps I decided to put the BITLY statistics on a map.

Currently the countries that have accessed my barcode related links looks like this.

The above Google map chart was created using an Excel macro as follows.

Screen shot of the final Excel sheet.

Creating the Chart Map

1) BitLy API Key

First I registed for a BitLy API key here

Logon with your BitLy account and the API key will be displayed.

2) Excel Setup

Changes required

From step 1 you should have a bitly userid and api key, enter these values in the following cells.

Change filenames of the CSV and XLS files to be saved, currently C:\ZBWIPPgooglechart. 

Change the names under URL to the links of you want to put on a map.

Run the macro "runbitly" to produce the Google chart maps.

This will then produce two files, one csv file and one xls file. The xls file will contain the Google map charts.

Extract of all the macro code involved.

 Public fXLS As String  
 Sub runbitly()  
 DI = Range("FILE").Value  
  fXLS = Range("XLS").Value  
 End Sub  
 Sub gettotals()  
 ' gettotals Macro  
  DI = Range("FILE").Value  
   Selection.Delete Shift:=xlToLeft  
   rr = Range("A1").End(xlDown).Row  
   Range(Cells(1, 1), Cells(rr, 3)).Select  
   Range(Cells(1, 1), Cells(rr, 3)).Sort Key1:=Range("C2"), Order1:=xlAscending, Header:= _  
     xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _  
   Selection.Subtotal GroupBy:=3, Function:=xlSum, TotalList:=Array(1), _  
     Replace:=True, PageBreaks:=False, SummaryBelowData:=True  
       rr = Range("A1").End(xlDown).Row  
   ActiveSheet.Outline.ShowLevels RowLevels:=2  
   ' Selection.SpecialCells(xlCellTypeVisible).Select  
    Range(Cells(1, 1), Cells(rr, 3)).SpecialCells(xlCellTypeVisible).Select  
   Selection.Replace What:=" Total", Replacement:="", LookAt:=xlPart, _  
     SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _  
   Application.CutCopyMode = False  
   Selection.Delete Shift:=xlToLeft  
   'remove grand totol  
    Rows(ActiveCell.Row & ":" & ActiveCell.Row).Select  
     Selection.Delete Shift:=xlUp  
   rr = Range("A1").End(xlDown).Row  
     Application.DisplayAlerts = False  
   ActiveWorkbook.SaveAs Filename:= _  
     DI, _  
     FileFormat:=xlCSV, CreateBackup:=True  
     Application.DisplayAlerts = True  
 End Sub  
 Sub chartg()  
 totcont = 0  
   rr = Range("A1").End(xlDown).Row  
   For i = 2 To rr  
   If Cells(i, 2) <> "None" Then  
   If i = 2 Then  
   totcont = totcont + 1  
   country = Cells(i, 2).Value  
   clicks = Cells(i, 1).Value  
   totcont = totcont + 1  
   country = country & Cells(i, 2).Value  
   clicks = clicks & "," & Cells(i, 1).Value  
   End If  
  End If  
    Next i  
  UR1 = ""  
 'UR1 = UR1 & "?chf=bg,s,EAF7FE"  
 UR1 = UR1 & "?chs=440x220"  
 UR1 = UR1 & "&cht=t"  
 'UR1 = UR1 & "&chco=FFFFFF,FF0000,FFFF00,00FF00"  
 UR1 = UR1 & "&chld=" & country  
 'UR1 = UR1 & "&chd=t:60,43,14,54,17,0,100,76,12,50,18,40,98,70,29"  
 UR1 = UR1 & "&chd=t:" & clicks  
 UR2 = UR1 & "&chtm=europe"  
 UR3 = UR1 & "&chtm=south_america"  
 UR4 = UR1 & "&chtm=asia"  
 UR1 = UR1 & "&chtm=world"  
  Cells(1, 3).Value = totcont & " Total Countries"  
   Cells(1, 3).Select  
   With Selection.Font  
     .Name = "Arial"  
     .Size = 14  
     .Bold = True  
     .ColorIndex = xlAutomatic  
   End With  
  Cells(3, 3).Value = UR1  
  Cells(4, 3).Value = UR2  
  Cells(5, 3).Value = UR3  
  Cells(6, 3).Value = UR4  
   rr = Range("A1").End(xlDown).Row  
   Range(Cells(1, 1), Cells(rr, 2)).Sort Key1:=Range("A2"), Order1:=xlDescending, Header:= _  
     xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _  
   ActiveSheet.Pictures.Insert( _  
     UR1 _  
   ActiveSheet.Pictures.Insert( _  
     UR2 _  
   ActiveSheet.Pictures.Insert( _  
     UR3 _  
   ActiveSheet.Pictures.Insert( _  
     UR4 _  
     Application.DisplayAlerts = False  
   ActiveWorkbook.SaveAs Filename:= _  
     fXLS, _  
     FileFormat:=xlNormal, CreateBackup:=True  
     Application.DisplayAlerts = True  
 End Sub  
 Sub getbitlystats()  
 '  FR = ActiveSheet.ActiveCell.End(xlDown).Row  
   Selection.Delete Shift:=xlUp  
   c = 2  
   While ActiveSheet.Cells(c, 3).Value <> ""  
  '  MsgBox ActiveSheet.Cells(c, 3).Value  
   UR = ActiveSheet.Cells(c, 3).Value  
   AUR = "FINDER;" + UR  
   DI = Range("Dir").Value  
   FI = ActiveSheet.Cells(c, 1).Value  
 '  MsgBox UR  
 '  MsgBox DIFIC  
    Cells(1, 1).Select  
   If Cells(1, 1).Value <> "" Then  
   Range("A1").End(xlDown).Offset(1, 0).Select  
    d = Range("A1").End(xlDown).Offset(1, 0).Row  
    d = 1  
   End If  
   With ActiveSheet.QueryTables.Add(Connection:= _  
     AUR _  
     , Destination:=Range(Cells(d, 1), Cells(d, 1)))  
     .Name = _  
     .FieldNames = True  
     .RowNumbers = False  
     .FillAdjacentFormulas = False  
     .PreserveFormatting = True  
     .RefreshOnFileOpen = False  
     .BackgroundQuery = False  
     .RefreshStyle = xlInsertDeleteCells  
     .SavePassword = False  
     .SaveData = True  
     .AdjustColumnWidth = True  
     .RefreshPeriod = 0  
     .WebSelectionType = xlAllTables  
     .WebFormatting = xlWebFormattingNone  
     .WebPreFormattedTextToColumns = True  
     .WebConsecutiveDelimitersAsOne = True  
     .WebSingleBlockTextImport = False  
     .WebDisableDateRecognition = False  
     .WebDisableRedirections = False  
     .Refresh BackgroundQuery:=False  
   End With  
   If d > 1 Then  
      Rows(d & ":" & d + 1).Select  
     Selection.Delete Shift:=xlUp  
     Rows(d & ":" & d).Select  
     Selection.Delete Shift:=xlUp  
   End If  
     c = c + 1  
   Selection.Replace What:="/data/countries/", Replacement:="", LookAt:= _  
     xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _  
   Selection.Replace What:="/data/", Replacement:="", LookAt:=xlPart, _  
     SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _  
   Selection.Replace What:="/", Replacement:="", LookAt:=xlPart, _  
     SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _  
   Selection.Replace What:="_", Replacement:="", LookAt:=xlPart, _  
     SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _  
   'Range(ActiveCell.Row & ":" & ActiveCell.Row).Select  
 End Sub  

Wednesday, August 31, 2011

Windows XP Movie Maker HD screen capture video: Create your own emulated HD profile

Ok a bit old school in regards to Windows XP, however for various reasons I only have a Windows XP system at the moment. I have been creating some screen capture videos on my XP laptop and editing these with movie maker. I was not really getting good results by editing and exporting screen captured video from movie maker.

Note the orignal profiles for HD I used do come from this website
That website link does state that the profiles help you emulate HD with movie maker.

So back to my screen capture videos with camstudio and editing with movie maker.
This is what I ended up doing to get high quality screen capture video on XP.

1) Download camstudio AND the lossless codec.

2) Downloaded the file WMV-HD-1280x720 from . ( I restarted movie maker and exported a video with the new profile)

3) This did improve the quality of my video, however not to the standard I had hoped.
So checking the display resolution on my XP laptop and it was 1024x768

4) I edited the downloaded profile WMV-HD-1280x720  with notepadd++  to match the resolution of my display. Basically changing all occurrences of 1280 with 1024 and 720 with 768. Then saved the file with a new name.

This works to the standard I wanted.

So for the best results for screen capture videos is to match the resolution of your screen to the output profile used by windows movie maker.

Here is is a link to my edited 1024x768 profile, which can be placed in the following directory

C:\Program Files\Movie Maker\Shared\Profiles\WMV-HD-1024x768.prx

Restart windows movie maker and the profile can be selected in output option

Monday, August 29, 2011

World Map of downloads of my Barcode SAP device types - BWIPP in SAP

As I have now left Japan, I thought I would close off my time there with a blog combining the two topics that were inspired by my stay in Japan. Those two topics were QRcodes and GIS(maps) with a focus on SAP.

QR codes
A QR code in my passport from Japan customs, led me to include the Barcode Writer in Pure Postscript in SAP. (BWIPP). The BWIPP can be included in SAP device types and I have made a number of these available for download. (follow the link to see the downloads).

Being lost in Japan made me fascinated with mapping and GIS (geographic information systems). I tried to include some of these elements in SAP. e.g. previous posts squeezing the world into SAP and hopefully I will post a link to an upcoming blog on SCN. I have a SCN blog still awaiting approval in regards to maps and SAP.

The combination: A map of SAP BWIPP device types downloads

The image below is generated by my geoserver in the cloud of only the countries that have clicked on my BWIPP device type links. The stats are based on information and I am maybe missing some countries from the list as site does have an "other" section. An example of the stats can be found here for QRcode downloads . So far 34 countries have accessed all the device types with over 250 clicks on them.

Here is the same map without any filters showing all countries in the world but the countries that have clicked on the BWIPP device types highlighted.

Saturday, August 27, 2011

Geocommons map of SCN Points

Below is my attempt at a map in Geocommons with the SCN points example.

View the map full screen here.

You can select show the details on any country be selecting the year and country as shown below.

The ABAP code I used to generate the data is in an SCN blog that is awaiting approval. As I am a SCN "junior" blogger each blog needs to be approved before its released.

My SCN blog title is "Thematic mapping SCN points with KML and other thematic map examples"

Tuesday, July 26, 2011

SCN World of Points

ABAP generated thematic map of SCN points worldwide. I do have an SCN blog in draft at the moment which covers the background to the ABAP program that generates the KML.

The KML thematic maps were created using the SCN RSS contributor feeds and using my Geoserver in the cloud to provide the world polygon KML from a Natural Earth shapefile.

The KML was embeded into blogger with the help of this link URL.

Google Earth API is required to display the KML. It may take a few minutes before the KML appears.
Average Points Per Contributor

BOBJ and Crystral Reports

Tuesday, June 7, 2011

SAP BSP for Lotus Notes Widgets - Display Sales Order example

Follow up to my earlier post on using regular expressions in Lotus Notes widgets for live text recognition and linking this to SAP transactions.

This post covers a generic BSP to construct URLs linked to the Lotus Notes Widgets. This example does not use the Live Text feature instead the SAP transaction is started via selecting text in an email. (It is still possible to use the Live Text feature with the appropriate regular expression)

The objective is to use selected text in emails to link to SAP screen fields in various SAP transactions.

Example for transaction VA03 display order.

The screenshot shows an example email with the SAP related order number.

If the order number is selected and a right click shows the Note menu for widgets
Selecting the Display Order (VA03) in the above example will lead directly to the
transaction - as shown below.

As the Lotus Notes Widget allows you to log on to SAP then further follow up actions can be done in the HTML GUI.

*These examples use Lotus Notes client on windows XP.
BSP setup

Two new pages are added to the same ZBSPLN8 used in the previous transport related example.

The BSP setup shown below.

Page widget.htm

Create attributes FIELD, TEXT and TRAN

Layout code is the javascript form used to for the Live Text widget in Lotus Notes
 <%@page language="javascript"%>
   <form method="POST" action="widgetresult.htm" target="_parent">
       <p> Transaction:
     <input type="text" name="tran" >
       <p> Screen Field:
     <input type="text" name="field" >
    <p> Text:
     <input type="text" name="text" >
     <input type="submit" value="Lookup Transport">

OnInputProcessing Event Handler

* event handler for checking and processing user input and
* for defining navigation
navigation->set_parameter( 'text' ).
navigation->set_parameter( 'tran' ).
navigation->set_parameter( 'field' ).

Page widgetresult.htm

Create attributes FIELD, TEXT and TRAN

OnInitialization Event Handler
Change the FQDN and port below to the appropriate values,

 * event handler for data retrieval
 data: tranc type string,
   url_ex type string,
   fieldc type string,
   textc type string.
 tranc = request->get_form_field( 'tran' ).
 fieldc = request->get_form_field( 'field' ).
 textc = request->get_form_field( 'text' ).
 concatenate 'http://F.Q.D.N:PORT/sap/bc/gui/sap/its/webgui?~okcode=*' tranc '+' fieldc '=' textc into url_ex.
 navigation->goto_page( url_ex ).  

*System logon changes
See the previous post on the required changes in SICF to allow the system log on page for the BSP. This is required for the Lotus Notes widget to log on to SAP.

Test the BSP and enter the values for the transaction VA03 the screen field for VA03 is VBAK-VBELN.
The text should be a valid order number for the SAP system.

For more information about Screen Fields check out this link

(Screen Fields are also used by GuiXT - see my post in regards to getting a Google static Map onto the SAPGUI which also uses Screen Fields)

Lotus Notes Widget

Check out the previous post for the logon details, below the major changes are noted.

First use the widget.htm page as the initial url

Select the HTTP POST (from a form on this web page)
and select "Authentication required"

Once successfully logged onto SAP, select the form from the BSP as shown below.

Enter the transaction VA03
Screen Field VBAK-VBELN
Text can remain empty
Select Next

Configure the Component

Complete the selections as above for the "Wire as an action" process.

On this screen the "text" field on the form is linked to the selected text in the Lotus Notes email.

This then completes the process. From now the widget will appear in the context menu of any selected text in an email. (repeat) screen shot example.

The screenshot shows an example email with the SAP related order number.

If the order number is selected and a right click shows the Note menu for widgets
Selecting the Display Order (VA03) in the above example will lead directly to the
transaction - as shown below.

Tuesday, May 24, 2011

QRcodes: PHP based QRcodes in the cloud

Following on from my Javascript based QRcodes in the cloud here

The same guy who wrote the javascript engine also has a PHP based generator released under the MIT license. The php code can be found here

So, with the help of I have created my very own webpage on my very own free Amazon micro cloud.

The form looks like this,

As you may be able to tell I have further plans to use php and create a bigger and better site.

I created the above form with and downloaded the code. I put all the code from and in one directory.

I then manually changed the submit action in form.html to call the adapted example qrcode php code.

Here is the adapted php code to generate the qrcode from the text in the form.
 $bt = $_POST['element_1'];
 $ty = $_POST['element_2'];
 $qr = new QRCode();
 $qr = QRCode::getMinimumQRCode( $bt , QR_ERROR_CORRECT_LEVEL_L);

And I added some google ads to the code and it looks like this.

Below is the live Amazon EC2 page. link here

Its my test Amazon server so the server may be shut down at any time.

Friday, May 20, 2011

QRcodes: Javascript based QRcodes in the cloud and an SAP BSP

Due to my involvement with the SAP mobile tagging wiki page.

I came accross the javascript based QRcode generator here.
The files to create QRcodes with Javascript can be downloaded from the above link.

Cloud Based Javascript QRcode

Only related to the cloud as I use my own free Amazon EC2 micro instance.

As I have access to my free Amazon micro instance in the cloud again, I put up the following simple webpage to generate a QRcode based on values in the URL. The following takes the parameter out of the URL and cuts the string after the 3rd character. Its my choice and there may be better ways of getting parameters with Javascript. If you know let me know :)

So a URL russell  would result in the following

The Javascript that creates the QRcode - qrcode.js and sample.js are uploaded to the same directory as the following webpage.

 <script type="text/javascript" src="qrcode.js"></script>
 <script type="text/javascript" src="sample.js"></script>
 <script type="text/javascript">
 var q =;
 var c = (q.substring(3));
 draw_qrcode( c );

SAP BSP Javascript based QRcode

Create a BSP (I called my BSP ZJQR) and upload the qrcode.js and sample.js to the MIME repository. Create a page called qr.htm as shown in the following screen shot. The "Q" page attribute needs the auto flag to be set

The code
 <%@page language="javascript" %>
 <script type="text/javascript" src="qrcode.js"></script>
 <script type="text/javascript" src="sample.js"></script>
 <script type="text/javascript">
 draw_qrcode("<%= q %>");
 <%= q %>  

So the URL (changing the FQDN and port to the server as appropriate) would produce the following


Tuesday, May 17, 2011

SAP: Using Lotus Notes 8 Livetext with SAP (example view transport logs)

We use standard CTS to mange our SAP transports and one thing that bugs me is checking the transport logs via logging on, running the transaction, enter transport number and see the results. When I started to use Lotus Notes 8 client I liked the livetext feature in linking key words to web pages. So I thought that there must be a quicker way to go to the transport logs using the livetext feature of Lotus Notes. After various attempts to use the standard HTML webgui for SAP I could not get the transaction to submit and display the transport logs. So using a BSP to form the URL here is a way to link to transport logs with Lotus Notes livetext. This post is not related to Alloy the IBM/SAP product for SAP and Notes integration, it takes advantage of the standard Notes 8 livetext feature by using a custom BSP in SAP. We do not use Alloy and I have no experience with that product.

This following is an example using transport logs although any transaction could be used with the right key words in livetext.

Also if you have Lotus Notes I am guessing you will also have a Notes application linked to SAP data. We do have a transport application in Notes that sends out emails during the phases of development, which we use for transport management and auditing purposes. The livetext feature helps when emails are sent via the application with the transport number. A way to view the transport log directly when clicking on the livetext activated transport number.

Screen shot of what I mean if you are not familiar with livetext. Note the blue underlined text in the email (the transport number) and the next tab is the log of the transport.

As the user is logged onto the HTML webgui then further actions/transactions can be performed.


Transaction to display transport logs.

There is no standard direct transaction to display individual transport logs. However there is an ABAP report RDDPROTT which will display transport logs. So I created a SAP transaction called ZJWEBB to call the ABAP report. This then makes forming the URL that displays the transport logs easier.


BSP called ZBSPLN8, general layout is below.

General idea is that page "transport_lookup.htm" is the form where the transport number is entered.
This then calls page "transportresult.htm" which redirects to the html webgui to display the transport logs :)


Layout   Simple form to use with livetext
 <%@page language="javascript"%>
   <form method="POST" action="transportresult.htm" target="_parent">
    <p> Transport No.:
     <input type="text" name="transport" >
     <input type="submit" value="Lookup Transport">

OnInputProcessing  set the transport number to pass to the results page.

* event handler for checking and processing user input and
* for defining navigation
navigation->set_parameter( 'transport' ).


transport TYPE STRING Transport number

Transportresult.htm  used to redirect to the HTML webgui

Layout This is only used for trouble shooting to display passed parameters. It can be ignored.

 <%@page language="abap"%>
 <%= transport %>
 <%= short_text %>

OnInitialization used to form URL with transaction ZJWEBB to display transport logs in the HTML webgui

 * event handler for data retrieval
 data: trans type str,
   url_ex type string,
 transport type e070-trkorr,
   li_cofi_lines TYPE TABLE OF tstrfcofil.
 trans = request->get_form_field( 'transport' ).
 select AS4TEXT from E07T into short_text where TRKORR EQ transport.
 concatenate 'http://F.Q.D.N:{port}/sap/bc/gui/sap/its/webgui?~okcode=*zjwebb+PV_KORR=' transport trans into url_ex.
 navigation->goto_page( url_ex ).

Change the F.Q.D.N and  {port} to the correct values for the installation.


short_text TYPE STRING
transport TYPE STRING

"short_text" was used for testing and also the SQL in the OnInitialization using this attribute can be ignored.

SICF Changes to BSP Service  allow system logon page for the BSP and not the standard popup logon.

Select "System Logon" and save the change. This allows the livetext widget to use the logon page.

Test to confirm the BSP is working by entering a transport number into the transport_lookup page.

Lotus Notes 8 Client Livetext Setup

Select the getting started with widgets icon

Select Web Page and Next

Enter the URL to the BSP - changing the FQDN and port as required then Next

Select "1" on the form and DO NOT change the default user and password and select Next. The user Lotus and password IBM are used by the livetext widget. The actual logon credentials come next.

Create a new user account with the correct logon details and select Next

Select Next do not enter anything on this page as it is just a confirmation that the logon to the SAP server was successful.

Select "1" on the form and select Next

Enter a component name and select "wire as an action". Select the "transport" ID from the BSP form and select Next.

Select Tab to display the results. Click on the "new recognizer"

Select New Type

Enter the Name for the new content type and hit OK

Enter a regular expression for the transport number. Here ...K...... will match any 10 digit string with a capitol K as the 4th character.

Select Next and Finish to complete the livetext widget.

So now if the livetext feature is active in Lotus Notes, all emails containing a transport number should have a blue underline indicating that the transport logs can be viewed by clicking on the transport number. As shown earlier. As this example is based on transports the server created for the BSP is the

The live text activation can be found in the preferences for Notes.

Google +