How to create an audit trail report in SAPB12007
Hello,
I been looking for some ways to make an Audit Trail Report for our System Audit. Could anyone help me with this?
I would like to generate a report that will list all the BP and ITem master data. the date its created and modified and if its modified what are the old values and the modified values.
I browse the table ACRD for the BP history. how every it could be read as a report. So I was wondering if anyone knows what table should I look at if I am to get the old and new value of a modified transaction. Pls. note that I wanted to create a report.
Thank you very much
cat
Here are the queries that I use for my audits internally. The first one is for customer changes. And the second one to control pricing.
Query Name: Business Partner History Log
Author: Vincent Motte
Version: 1.0
History:
/SELECT FROM ACRD T1/
DECLARE @DATE AS DATETIME
/* WHERE */
SET @DATE = /* T1.UpdateDate */ getdate()-30
SELECT
CASE
WHEN (SELECT ISNULL(T10.BankCode,0) FROM ACRD T10 WHERE T10.CardCode=T0.CardCode AND T10.LogInstanc=T0.LogInstanc-1)<>ISNULL(T0.BankCode,0)
Then 'Bank details modified'
WHEN (SELECT ISNULL(T10.DflAccount,0) FROM ACRD T10 WHERE T10.CardCode=T0.CardCode AND T10.LogInstanc=T0.LogInstanc-1)<>ISNULL(T0.DflAccount,0)
Then 'Bank details modified'
WHEN (SELECT ISNULL(T10.DflBranch,0) FROM ACRD T10 WHERE T10.CardCode=T0.CardCode AND T10.LogInstanc=T0.LogInstanc-1)<>ISNULL(T0.DflBranch,0)
Then 'Bank details modified'
WHEN (SELECT COUNT(T10.CardCode) FROM ACRD T10 WHERE T10.CardCode=T0.CardCode and T10.LogInstanc<T0.LogInstanc)<=0
Then 'Creation'
else ''
END 'Alert',
T0.UpdateDate 'Update Date', T1.[U_NAME] 'User',T0.CardCode, T0.CardName
, T0.[CreditLine], T0.[DebtLine],
T0.[Discount], T0.[VatStatus], T0.[LicTradNum], T0.[ListNum] 'Price List', T0.[DflAccount], T0.[DflBranch], T0.[BankCode],
T0.[validFor], T0.[frozenFor], T0.[VatGroup], T0.[Deleted], T0.[PymCode], T0.[BlockDunn],
T0.[WTCode]
FROM ACRD T0 , OUSR T1 WHERE
T1.INTERNAL_K=T0.UserSign AND T0.UpdateDate>=@DATE
Query Name: Price Change log
Description: extracts the price modification for each item in SBO for the past 30 days
Version 1.0
Author: Vincent Motte
History:
Select
--T0.UserSign,
T1.itemcode 'Item Code',
T0.Price [Previous],
T1.Price [Current],
T2.ListName 'Price List',
T0.Factor[Old Factor] ,
T0.factor [New Factor],
/* select the update date for the log instance(determined by the where condition )*/
(Select distinct T3.Updatedate from aitm T3 where T3.itemcode= T0.itemcode and (T3.loginstanc +1)= T0.loginstanc ) 'Update Date',
T0.loginstanc 'Instance',
T2.listName 'Price List',
/Select the base price list for the item's price list from the price list table/
(Select T4.base_num from opln T4 where T4.listnum = T1.pricelist and T4.listnum = T0.pricelist) [Base PriceList ]
--t0.Currency,
--T1.CURRENCY
From
ait1 T0 inner join
itm1 T1 on T0.pricelist = T1.pricelist and T0.itemcode = T1.itemcode
Inner Join opln T2 on T1.pricelist = T2.listnum
where
/* Condition 1: Select all the items + their price change where the price has been changed and the base price list equals the price list itself. It counts the Log Instance from the item in
the price list and substract one to get the last entry where the price was changed. The loginstance coutn ignores a count of 1
T0.loginstanc =
((Select count (a.Loginstanc) from ait1 a where a.itemcode = T0.itemcode and a.pricelist = T0.pricelist group by a.itemcode having count(a.Loginstanc) > '1' ) -1)
and
/* Cater for prices in target price lists which may have been manually changed. */
(T1.ovrwritten='y'and T0.Price <> T1.Price)
or (T0.Price <> T1.Price and T2.base_num = T1.pricelist and T2.base_num = T1.pricelist
and T2.base_Num = T2.listnum )
Cater for cases where a currency change but not a price change may happen
OR T0.CURRENCY <> T1.CURRENCY
or
Condition 2: Select all price changes where the price may have changed due to the price of the parent price lsit changing.
As this type of price chnage is not recorded in the AIT1 the second log instance condition details that the base price list
from opln does not equal the actual price list in ait1 or itm1.
T0.loginstanc =
(Select top 1 c.loginstanc from ait1 c where c.itemcode = T0.itemcode and c.pricelist = T0.pricelist and c.loginstanc <> '1' order by c.loginstanc desc)
and T2.base_num <> T1.pricelist and T2.base_num <> T1.pricelist
and T2.base_Num <> T2.listnum
and
caters for a change in the factors or prices in target price lists which may have been manually changed.
((T0.Factor <> T1.factor)
or (T1.ovrwritten='y'and T0.Price <> T1.Price)
or T0.price <> T1.price
Cater for cases where a currency change but not a price change may happen
OR T0.CURRENCY <> T1.CURRENCY
and (T0.Price >= 0 or T1.Price >=0) and ((T0.Price <> T1.Price) or ((T0.Price <>
(Select distinct b.pricelist from itm1 b right outer join OPLN T4 on b.pricelist= T4.listnum and b.pricelist <> T4.base_Num where b.pricelist = T1.pricelist and b.itemcode =T1.itemcode)))
and (Select distinct T3.Updatedate from aitm T3 where T3.itemcode= T0.itemcode and (T3.loginstanc +1)= T0.loginstanc ) >getdate()-30
Similar Messages
-
How to create an audit trail file and what is it ( pls see the code)
All my System.out.println statements , should be printed in an audit file , instead of printing to a console .
How and where in the program , i should create a file and how should i write System.out.println statements output to it .
Pls help me with the code .
//Start the main method
public static void main(String[] args){
if(!(args.length == 3 || args.length == 4))
System.out.println("Usage: java Load_data @baseyr @rateyr @caseID [@infile]");
System.exit(1);
String baseYr = args[0];
String rateYr = args[1];
String param3 = args[2];
System.out.println("The base year is :"+baseYr);
System.out.println("The rate year is :"+rateYr);
if(param3.compareToIgnoreCase("max") == 0)
caseID=25;
System.out.println("The CaseID begins at :"+caseID);
else if(param3.compareToIgnoreCase("one") == 0)
System.out.println("Warning : I am assuming the CaseID as 1");
//caseID=1;
inFile = (args.length == 4) ? args[3] : "C\\UDS_YYYY.txt";
System.out.println("The Input file we are using is :"+inFile);
goodOutFile = "C:/Documents and Settings/Desktop/Program/GOOD_LOAD.txt";
badOutFile = "C:/Documents and Settings/Desktop/Program/BAD_LOAD.txt";
inFormat = "C:/Documents and Settings/Desktop/Program/FORMAT.csv";
//Here I call the Load_data method.
new Load_data();
System.out.println("The number of records written to good O/P FIle :" +goodRecord);
System.out.println("The number of records written to bad O/P FIle :" +badRecord);
System.out.println("")
}1sai wrote:
However, a better choice would be to use log4j which support rolling log files and more control over what output goes where in what format.
Can U pls explain this ,or where i can learn abt this .
Thank UTry clicking on the link BigDaddyLoveHandles provided you in the previous reply.
Your hands must get tired with your hiney sitting on them all day, huh? -
How to create Matrix with Group report layout in xml
Hi,
i would be glad if anyone could tell me How to create Matrix with Group report layout in xml?
Here i am attaching the required design doc
below is the code
select COST_CMPNTCLS_CODE,
-- crd.RESOURCES,
NOMINAL_COST,
cmm.COST_MTHD_CODE,
-- crd.COST_TYPE_ID,
gps.period_code
-- ORGANIZATION_ID
from CM_RSRC_DTL crd,
gmf_period_statuses gps,
CM_MTHD_MST cmm,
CR_RSRC_MST crm,
CM_CMPT_MST ccm
where gps.period_id = crd.PERIOD_ID
and crd.cost_type_id = cmm.cost_type_id
and crd.RESOURCES = crm.RESOURCES
and crm.COST_CMPNTCLS_ID = ccm.COST_CMPNTCLS_ID
and gps.period_code in (:p_period1, :p_period2, :p_period3)
group by COST_CMPNTCLS_CODE, cmm.COST_MTHD_CODE, gps.period_code,NOMINAL_COST
order by 1,2,3,4.
The o/p of the report shoud be as given below
Period-1 Period-2 Period-3 Period-4
COMPONENT
LABOUR - DIRECT
Actual 1 2 3 4
Actual Rate 10 10 10 10
Standard Rate
Var%
DEPRICIATION-DIRECT
Actual
Actual Rate
Standard Rate
Var%
OVERHEAD - DIRECT
Actual
Actual Rate
Standard Rate
Var%
LABOUR - IN DIRECT
Actual
Actual Rate
Standard Rate
Var%
Thanks in advanceYour friend is obviously not a reliable source of HTML
information.
Murray --- ICQ 71997575
Adobe Community Expert
(If you *MUST* email me, don't LAUGH when you do so!)
==================
http://www.dreamweavermx-templates.com
- Template Triage!
http://www.projectseven.com/go
- DW FAQs, Tutorials & Resources
http://www.dwfaq.com - DW FAQs,
Tutorials & Resources
http://www.macromedia.com/support/search/
- Macromedia (MM) Technotes
==================
"Mr.Ghost" <[email protected]> wrote in
message
news:f060vi$npp$[email protected]..
> One of my friends advised me to develop my whole site on
the layout mode
> as its
> better than the standard as he says
> but I couldnot make an ordinary table with rows and
columns in th layout
> mode
> is there any one who can tell me how to?
> thanx alot
> -
Audit Trail Report Ignores Parameters From/To Date on EBS 12.0.6
Hi All,
One of our customers is not able to filter the data in "Audit Trail Report" based on date parameters.
Is there any patch for this..
EBS Version is 12.0.6
I have found a note but it is related to 11i.
Audit Trail Report Ignores Parameters Transacted By, From/To Date (Doc ID 364304.1)
Any help is greatly appreciated..
Best Regards
gt1942I don't see any patch available for 12.0.x and this issue should be fixed in this release.
Please log a SR for this issue.
Thanks,
Hussein -
Where to find Standard Audit Trail reports in SAP BPC 10
Hi Experts,
We being new to SAP BPC v 10 are stuggling to find the standard Audit trail reports which were present in version 7.
Can any body guide us with the roadmap by which we can see those standard Audit trail reports in version 10.
Thanking in Anticipation for a quick and favorable response.Hi Sanjeev,
In SAP BI, we have standard BI content reports which is present which just needs to be installed and is ready to be used.We are trying to find such Audit trail reports and unable to find those reports in SAP BPC 10 NW version.
Could you please guide us if we are missing anything.
Thanks in advance.
Thanks & Regards,
M.S -
How to create user editable Crystal Report with dynamic dataset
What I would like to achieve:
A program loads a report in runtime updates list of database fields (possibly includes sample data), open report in "Crystal Reports 2011" (or 2008) where user customizes report and saves it. Later on the program loads the report, fills actualized data and displays it in .net report viewer.
What I do:
CrReport = New CrystalDecisions.CrystalReports.Engine.ReportDocument
CrReport.Load(TemplateFilename)
Dim Results As DataTable
DataTable is filled from a database
CrReport.SetDataSource(mResults)
CrReport.SaveAs(NewReportPath, True)
The NewReportPath is opened in the default program.
What are the problems
The report is open in preview mode (not in design).
When the field is added to the report the designer asks for XML datasource on preview.The short answer is that it is not possible. I broke the question to other two: How to save a report that it opens without preview? and How to create user editable Crystal Report with dynamic dataset, where it is possible to find details. Key answer is Re: How to create an editable previewable report?
-
How to create radio button in reports
Hi Friends,
Can any body please tell how to create radio button in reports.
Thanks,
NagendraHi Nagendra,
But why do u need a single radio button, any specific reason...
try this
REPORT ZCHA1.
PARAMETERS : P_RAD1 RADIOBUTTON GROUP RAD,
P_RAD2 RADIOBUTTON GROUP RAD.
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
IF SCREEN-NAME = 'P_RAD2'.
SCREEN-INVISIBLE = '1'.
MODIFY SCREEN.
ENDIF.
ENDLOOP. -
Stock Audit Trail Report Error - Attempt to read or write protected memory.
Hi,
I have a customer running on
1. SQL 2008 SP2
2. SAP B1 8.8 PL21
After the Stock Audit Trail report is run, on the output screen, when i try to click on any of the "Golden Arrow" to drill down, i get an error message on the bottow of the screen that says
"[ItemEvent]: Attempt to read or write protected memory. This is often an indication that other memory is corrupt."
I get this error on workstations as well as servers. What could be wrong and what should i do?
Thanks,
Taw-Fey, TanHi Taw-Fey,
Check your demo database to see if you get the same error. If not, something is wrong in your live db. You need at least DBCC to check.
Thanks,
Gordon -
Hi Expert,
Instead of using the existing audit report "S_AHR_61016380", I would like to create a customized report for this. I try to go throguh the source code in this report, but no luck for me.
Could you please let me know the table name to store the audit trail data? I need to extract it myself and put it into my company's format.
Million thanks,
WFHi Harsh,
I have lots of record from the standard audit report, but I cannot find any record in view V_PTRV_APPR.
Could you please let me know how to get record from these table?
Thanks,
WF -
Hi All,
Suppose I have table, whose structure changes frequently on daily basis.
For eg. desc my_table gives you following column name on Day 1
SQL > desc my_table;
Output
Name
Age
Phone
On Day 2, two more columns are added, viz, Address and Salary.
SQL > desc my_table;
Output
Name
Age
Phone
Address
Salary
Now I want to create an Dynnamic RTF report which would fetch data from ALL columns from my_table on daily basis. For that I have defined a concurrent program with XML as output type and have attached a data template/data definition to it which takes in XML as input and gives final output of conc program in EXCEL layout. I am able to do this for constant number of columns, but dont know how to do it when the number of columns to be displayed changes dynamically.
For Day 1 my XML file should be like this.
<?xml version="1.0" encoding="UTF-8"?>
<dataTemplate name="XYZ" description="iExpenses Report" Version="1.0">
<dataQuery>
<sqlStatement name="Q2">
<![CDATA[
SELECT Name
,Age
,Phone
FROM my_table
]]>
</sqlStatement>
</dataQuery>
<dataStructure>
<group name="G_my_table" source="Q2">
<element name="Name" value="Name" />
<element name="Age" value="Age" />
<element name="Phone" value="Phone" />
</group>
</dataStructure>
</dataTemplate>
And my Day 1, EXCEL output from RTF template should be like this.
Name Age Phone
Swapnill 23 12345
For Day 2 my XML file should be like this. With 2 new columns selected in SELECT clause.
<?xml version="1.0" encoding="UTF-8"?>
<dataTemplate name="XYZ" description="iExpenses Report" Version="1.0">
<dataQuery>
<sqlStatement name="Q2">
<![CDATA[
SELECT Name
,Age
,Phone
,Address
,Salary
FROM my_table
]]>
</sqlStatement>
</dataQuery>
<dataStructure>
<group name="G_my_table" source="Q2">
<element name="Name" value="Name" />
<element name="Age" value="Age" />
<element name="Phone" value="Phone" />
<element name="Address" value="Address" />
<element name="Salary" value="Salary" />
</group>
</dataStructure>
</dataTemplate>
And my Day 2, EXCEL output from RTF template should be like this.
Name Age Phone Address Salary
Swapnill 23 12345 Madrid 100000
Now, I dont know below things.
Make the XML dynamic as in on Day 1 there must be 3 columns in the SELECT statement and on Day 2, 5 columns. I want to create one dynamic XML which should not be required to be changed if new columns are added in my_table. I dont know how to create this query and also create their corresponding elements below.
Make the RTF template dyanamic as in Day1 there must 3 columns in EXCEL output and on Day 2, 5 columns. I want to create a Dynamic RTF template which would show all the columns selected in Dynamic XML.I dont know how the RTF will create new XML tags and how it will know where to place it in the report. Means, I can create RTF template on Day 1, by loading XML data for 3 columns and placing 3 XML tags in template. But how will it create and place tags for new columns on Day 2?
Hope, you got my requirement, its a challenging one. Please let me know how I can implement the required solution using RTF dynamically without any manual intervention.
Regards,
Swapnil K.
Message was edited by: SwapnilKHi All,
I am able to fulfil above requirement. Now I am stuck at below point. Need your help!
Is there any way to UPDATE the XML file attached to a Data Definition (XML Publisher > Data Definition) using a standard package or procedure call or may be an API from backend? I am creating an XML dynamically and I want to attach it to its Data Definition programmatically using SQL.
Please let me know if there is any oracle functionality to do this.
If not, please let me know the standard directories on application/database server where the XML files attached to Data Definitions are stored.
For eg, /$APPL_TOP/ar/1.0/sql or something.
Regards,
Swapnil K. -
How to create Status in ALV reports?
Hi experts,
I need to create a status in a alv report. but i am not getting how to create it. i have declared a variable type slis_formname. and appended the events with it. now how to create the status in form.answers will be rewarded.
Thanks in advance,
RamanaHello Venkat,
Copy the standard pf status of the ALV in SE41 and do the following.
DATA: IT_EVENTS TYPE SLIS_T_EVENT,
WA_EVENTS LIKE LINE OF IT_EVENTS.
REFRESH: IT_EVENTS.
CLEAR: WA_EVENTS,IT_EVENTS.
WA_EVENTS-NAME = 'PF_STATUS_SET'.
WA_EVENTS-FORM = 'STATUS'.
APPEND WA_EVENTS TO IT_EVENTS .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = IT_VARIANT-REPORT
I_CALLBACK_TOP_OF_PAGE = 'TOP_OF_PAGE'
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
IT_FIELDCAT = IT_FIELDCAT
I_SAVE = 'A'
IS_VARIANT = IT_VARIANT
IT_SORT = IT_SORT
IT_EVENTS = IT_EVENTS
TABLES
T_OUTTAB = G_T_OUTTAB
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
FORM status *
FORM STATUS USING RT_EXTAB TYPE SLIS_T_EXTAB.
SET PF-STATUS 'STANDARD' EXCLUDING RT_EXTAB.
ENDFORM.
If useful reward.
Vasanth -
How to create a Group Above report using APEX
I want to create a Group above report with more that one group using APEX. Is it possible to generate such a report using APEX. If so kindly let me know how to go about creating a Group above report with more than one group.
Hello Srini,
Thank you very much for the reply but I'm not into OBIEE... I want the required query to be processed and the output to be shown in xml layout to load into RTF document. The rest I can manage.. but please let me know how to get the .xml output with out using the report builder or the apps environment(concurrent prg submission)..
Please let me know if any... urgent
Thanks in advance
Krishna -
How to create a matrix like report with description column
Hi,
currently i have two tables - one describing a job and another describing the stock. it is a simple relation where a job uses stock.
i join job and stock using stock_code. there are three categories of stock - namely envelope, insert, stationary.
i wish to create a cross tab report - basically i would like it to look like
jobname, envelope, stationary, insert
abc, e1, s1, i1
, ,s2,i2
def, e2,s3,i4
, e3, , i5
basically for each job i would like to place the stock code under envelope, stationary, or insert based on what type of stock it is. i can do this in sql, however, i get left with blank spaces.
i do this by
select
"FILE_PARAMETER"."FILE_NAME" as "FILE_NAME",
"CATEGORY",
"STOCK"."STOCK_CODE" as "STOCK_CODE",
decode(upper("CATEGORY"), 'LASER', "STOCK_CODE", '') "LASER",
decode(upper("CATEGORY"), 'ENVELOPE', "STOCK_CODE", '') "ENVELOPE",
decode(upper("CATEGORY"), 'INSERT', "STOCK_CODE", '') "INSERT",
decode(upper("CATEGORY"), 'INSERT',"STOCK"."DESCRIPTION",'') "DESCRIPTION"
from
"FILE_PARAMETER" "FILE_PARAMETER",
"JOB_OVERVIEW" "JOB_OVERVIEW",
"STOCK" "STOCK"
where
"FILE_PARAMETER"."FILE_NAME"="JOB_OVERVIEW"."AP_JOB_CODE"
and "FILE_PARAMETER"."SCODE"="STOCK"."STOCK_CODE"
ORDER BY "FILE_PARAMETER"."FILE_NAME", "CATEGORY"
unfortunately this doesn't give me exactly the output i want. i would like it to show the first piece of stock in each category on the first line, and each subsequent stock on the line after that for each job group. my solution at the moment will put the stock in the corresponding stock category column but i have been unable to find a solution to removing the blank space.
i have created the matrix report in developer and it can do what i want, however, it will not show the description for insert only. the way i have grouped it, it wants to show it all, and being a reports newbie i have no idea how to fix that
any solutions would be very much appreciated!This feature is supported in MS Access and known as CROSSTAB through TRANSFORM function.
In Oracle this exists but not in a elegant way as in MS.
You have addition function GROUP BY ROLLUP and CUBE and GROUP BY GROUPING SETS, available in 10g, which can help you.
Look in manuals and play with it! -
How to creat a summary of report with .txt
Hi All,
I want to creat a summary of report with .txt,and i have disabled the function about report generation in teststand.
i created a complex sequence,it include some sub-sequences,example:the uut is tested on three different temperatures and four different voltages conditon.So i have creat three sub-sequences (diffrent temperatures) include four steps (different voltages),then mainsequence invoke three sub-sequences to excute test.
i only want get the fail-step's summary with,include: fail-step's name,status
how to do?thanks a lot
Solved!
Go to Solution.You can use Parameters.Step.Name to get the failed step name. You can also use something like Parameters.Step.StepType.Name == "NI_MultipleNumericLimitTest" to filter different types of steps.
As far as finding the entire failure chain...
You can check RunState.CallStackDepth to see how many callers deep you are. Based on that information you can use RunState.Caller.Caller.(continued for however many callers deep you are).RunState.Step.Name or .Sequence.Name
So if the CallStackDepth is 1, you would only need to use one Caller. If it was 2, you would need to recursively use 1 Caller and then 2 Callers and so on.
CTA, CLA, MTFBWY -
How To Create ESR (Enterprise Support Report) ?
Hi All Experts and Consultants,
I'am a junior basis consultant @ my new company and Please read my problem and give me the solution.
I was commanded by my manager to create ESR (Enterprise Support Report). I still don't know to do this. Firstly, I have no problem with generating and download EWA report in Solman System. My senior at my previous company told me that creating ESR can be done in Solman by using T-Code DSWP. But after looking deeply into Tcode DSWP, I didn't see how to make it as I wanted.
My question is :
Is it true that creating ESR can be done on Solman System or do I have to create on another system?
How to do it? Kindly Please describe the steps..
I was told that EWA and ESR is different matter. I will be glad if you could help me.
Thank You and hopefully I didn't ask at wrong "room".
Regards,
GuswekaCheck these notes below to clarify how to create ESR reports.
1391968 Enterprise Support Report / PSLE Report - BI SelfService
1541883 Continuous Improvement Dashboard
1539529 Sending Solution Data from SAP Solution Manager to SAP -- A Practical Guide.
1321295 Enterprise Support Report
Check this documentation too service.sap.com/solutionmanager => Media Library => Documentation => Enterprise Support Report (EN)
Maybe you are looking for
-
Service Text of Purchase Order
Hi All, I am devloping a Smartform, which will retrieve the PO related data and print it. In Purchase Order (Service Type), each line item wil have service related data classified into different sub items. In the services tab, we can find the field c
-
Dock for 3rd Gen. iPod Won't Work w/ 5th Gen. iPod?
I have a third generation (G3) iPod, which came with a docking station and an iPod-to-firewire cable. I also have a fifth generation (G5) iPod, which did not come with a docking station, but did come with an iPod-to-USB cable. I can charge the G3 iPo
-
HI Experts, The following code i used for bind the query result to matrix. It bind sucessfully and when i click Add button i am getting the sucsessful message .But when i close the programme and open the screen using screen painter and check the reco
-
I just updated my phone and can not close the running apps. Battery dying fast. I did try double clicking the home button but swiping up did not work??
-
I'm trying to understand the difference between these two apps. I am pretty much a complete web app noob. I did use GL a bit years ago, and use Rapidweaver now and then. Pretty much 100% of my design work is print. I have been getting more requests t