Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
VOL. 8 / ISSUE 1
Continued on page 2
PowerTimes
While being different may mean that some people may
not like you, being boring means no one will. If youre
different, chances are more will.
Whats Inside
The same is true for web sites. Most sites tend to look so
similar its as hard to tell them apart as it is to tell a
Toyota Camry from a Nissan Sentra (and where do they
get those names?).
by Daniel Will-Harris
Impressum
on Page 2
Daniel Will-Harris
http://www.FuseLetter.com,
http://www.eFuse.com
Contact addresses:
Editor:
Rolf Andr Klaedtke
Bchlistrasse 21
CH-8280 Kreuzlingen / Switzerland
Fax: ++41 - (0)71 - 670 01 71
e-mail: rak@powertimes.com
Co-Editor:
Mark A. Lansing
Eichmatt 17
CH-6343 Rotkreuz / Switzerland
Fax: ++41 - (0)41 - 790 74 79
e-mail: mlansing@powertimes.com
Page 2
PowerTimes
FUTURE VISIONS: SURVIVING ON THE NETWORK EDGE
by Barry Morris
No More Web Sites
Introduction
With almost incomprehensible speed, the Internet has
gone from a medium for serving up static marketing messages to a ubiquitous computing platform. And with the
pace of change accelerating, the next few years will see
an ever more profound evolution:
Services-based applications will require an e-business platform that does not exist today. As organizations increasingly do business over the Internet, organizational boundary lines will blur. This blurring
will occur most quickly among those organizations
that gravitate to these new, entirely standards-based
e-business platforms. Proprietary platforms will increasingly isolate their users at great competitive cost
to them.
an explosion of access
technologies shows no sign of
slowing
Inside, organizations have spent years evolving their information system infrastructure. For most organizations,
this infrastructure includes one or more operating platforms, typically involving some combination of mainframe, UNIX and Windows environments. The infrastructure also typically includes a variety of applications designed to automate business processes. Depending on an
organizations sophistication and technical prescience,
these applications interoperate to a greater or lesser degree. Finally, the infrastructure contains content, comprising both structured application data and unstructured
text, HTML pages, and other material.
Outside, an explosion of access technologies shows no
sign of slowing. Broadband technologies provide an evergrowing pipe to end users, which spurs their appetite for
access, which drives the growth in pipe capacity, and so
on. A growing variety of appliances, some user-driven
and some automated, places ever-greater demands on organizations to furnish information in multiple formats
simultaneously. And the growth in wireless access technology in particular means that appliances/users can demand information wherever they are, whenever they want
it.
Infrastructure and access meet at the network edge, where
organizations are increasingly driven to deliver pervasive, personalized content and commerce. Outside the
network edge are billions of Internet devices. Inside the
network edge is the enterprises very competitive machinery. Whatever organizations erect at the network edge
must be extremely scalable, highly reliable and available,
very secure, and online all the time.
Clearly, we are not describing a Web site here. We are, in
fact, describing an entirely new use of the Internet, designed to meet the unique demands placed on an organization at the network edge. The name for this new phenomenon is an enterprise portal.
Page 3
PowerTimes
An enterprise portal is an Internet site owned and operated by an organization in support of its business operations. The enterprise portal is a single point of contact
and community between the enterprise and all of its
stakeholders and prospects. Like the popular consumer
portals, an enterprise portal organizes a variety of information, using indexes and visual presentation.
Page 4
PowerTimes
Application servers are useful for function-rich Web sites,
and even for low-end consumer portals, because they provide a rich container for new application logic. However,
enterprise portals are far more demanding than this.
For example, enterprise portals require extensive integration of existing enterprise applications on mainframe,
UNIX and Windows NT platforms. This integration needs
to be non-intrusive, standards-based, both synchronous
and asynchronous in nature, and driven by a flexible business process modeling and workflow mechanism. Additionally, enterprise portals require extremely feature-rich
Web-facing capabilities. Portal implementers will need
features such as personalization, access control and management and content management, and they will want to
be able to expose portal content to a variety of client devices.
Application servers are good at supporting business logic.
They are not good at application integration or content
management or any of a number of other important enterprise portal functions.
As a growing number of organizations realize the importance of back-end integration to their portal strategies,
application server vendors have begun to bolt integration
capabilities onto their standard application server offerings. We believe that this is a misguided approach to portal construction that in the end will not allow developers
to maintain pace with the nature of Internet application
development, because it ignores the fundamental change
in application architecture that we believe is imminent.
We believe that application servers will evolve to become
what the Gartner Group calls portal servers. Portal servers provide organizations with all of the development,
deployment and management functions they need to build
effective enterprise portals. Portal servers offer not only
an application platform, but also an integration platform
and a Web-facing platform. In other words, they provide
the combined functionality that organizations need to
build and deploy enterprise portals.
Portal servers are more than a loose collection of application server, integration server and Web development technologies. Portal servers are designed from scratch to supply what Gartner Group calls front-end to back-end integration via composite-applications-oriented solutions.
No More Applications
Applications today, whether they are intended for
mainframes or J2EE application servers, tend to be
architected as distinct, single systems. While these applications may be designed to interact with other systems and may even be built in accordance with one of todays
standard distributed application architectures - they nonetheless are islands. And integrating these islands is a difficult and expensive undertaking.
developers of services-based
applications will focus far more
often on interactions.
Microsoft, with its .NET strategy, is popularizing services-based application architectures among business application developers. These architectures are at the heart
of Microsofts strategy, which envisions constellations
of computers, devices, and services that work together to
deliver broader, richer solutions [where] computers, devices, and services will be able to collaborate directly with
each other, and businesses will be able to offer their products and services in a way that lets customers embed them
in their own electronic fabric.
* Editors note: SOAP and other terms: see later in this
article
Page 5
PowerTimes
Applications built around what Gartner Group calls eservices and what Microsoft calls Web services will feature business services that involve both new functionality and recapture existing application functionality and
front-end services providing portal access to a variety
of users at a variety of clients.
Expect that these applications will involve an enormous
variety of data. Todays business application developers
are often concerned with database-centric transactions,
and even today many application server vendors respond
to this concern by focusing attention on their OLTP capabilities. But enterprise portal users will need access to
more than database data. With exposing the entire enterprise to a heterogeneous audience as their fundamental
design goal, enterprise portals will support applications
that are concerned substantially with mixed and often
unstructured data. Accordingly, developers of servicesbased applications will focus far more often on interactions. Certainly, these interactions may subsume traditional transactions, but they will also involve unstructured data and business logic.
Expect that these applications and their services will involve transactions and interactions that transcend machine, application space, and even enterprise boundaries.
SOAP will provide the standard communications protocol for these services and, indeed, for Internet-wide computing in general.
Expect that these services-based applications will have
to accommodate a variety of client devices and, on each
device, a variety of customized and personalized interfaces. Users will increasingly anticipate that their unique
needs will be met by each applications front-end services.
UDDI (Universal Description, Discovery and Integration), proposed by IBM, Microsoft and Ariba,
begins to solve the problems inherent in bringing
together e-businesses, each with its unique business
processes, unique collection of business automation
technology, and unique services made available to
customers and potential customers. UDDI provides
a universally available, standard means for unique
entities to describe and promote themselves on these
various dimensions.
Page 6
PowerTimes
languages, will be relying on the e-business platform to
solve an enormous variety of programming challenges, it
must provide programming personalities for native XML,
EJB/J2EE, mainframe (i.e., CICS, IMS, COBOL and PL/
1), CORBA and COM/DCOM.
Enterprise portal applications will, from organization to
organization, present a dizzying variety of services and
functionality to a diverse population of end-users. Developers will, from project to project, need some application
features and services and not others. The e-business platform must allow for this, and provide pluggable qualities
of service, including security, distributed transactions,
management, load-balancing, fault tolerance, and so on.
Business application developers using XML and Java, who
have no particular .NET- or CORBA-like experience, will
particularly appreciate the e-business platform. With its
ability to expose existing back-end applications and other
enterprise resources as services, it will ease the transition
for mainstream developers into the world of services-based
architectures and portals.
Page 7
PowerTimes
Page 8
PowerTimes
Getting Technical: DataWindow Linkage and
the LUW in the Jaguar CTS environment
by Vladimir Uzlaner
About the author
Vladimir Uzlaner is an
independent contractor,
specialized
in
PowerBuilder applications. He has over 6 years experience in PowerBuilder, including PFC, OLE 2 and Distributed environments. You can contact him on
vuzlaner@sympatico.ca
Introduction
The issue relates to DataWindow linkage, and what difficulty a developer may face because of DataWindow synchronization and related matters required in the development of a PowerBuilder application for the Jaguar distributed environment.
It is recommended that developers create stateless components for multi-user, high-volume applications. Such
components are destroyed (actually deactivated, and
pooled) after every method invocation. In this case, if a
given component is transactional, all transactions are
going to be completed. To state this in a more direct fashion, even for Jaguar novices, this means that if you update many database tables and you are going to do it in
one transaction, you must do it in a single function.
2.
3.
Page 9
PowerTimes
This is the second axiom.
http://www.pfcguide.com/extensions/ext_0006.asp
For those of you who are interested in the idea only and
not in the details, you can skip the example below and go
straight to the section on page 15 which covers using a
statefull component.
Example
then clicks Save. In the clicked event of the Save button we call a remote of_Update() function of the component in_bo_jag, declared as an instance variable :
n_bo_jag
in_bo_jag
Protected:
string
is_UpdatesAllowed=IUD
// I-Inserts U-Updates D-Deletes
of_SetUpdatesAllowed(string as_arg)
//function to set this variable to desired value
(D, U or I):
is_UpdatesAllowed = as_arg
Continued on page 10
Page 10
PowerTimes
Long ll_row
String
ls_error
Blob lblob_master, lblob_detail, lblob_detail_items
Long ll_rtn
ll_row = dw_master.GetRow()
dw_master.GetChanges(lblob_master)
dw_detail.GetChanges(lblob_detail)
dw_detail_items.GetChanges(lblob_detail_items)
ll_rtn = in_bo_jag.of_Update( ls_error, lblob_master, lblob_detail, lblob_detail_items, &
gnv_app.of_get_userid(), il_gen_num)
ll_po_notes_row = dw_detail.GetRow()
If ll_rtn < 0 then
<Error Message >
Return
Else
//
dw_master.SetChanges(lblob_master)
//
dw_detail.SetChanges(lblob_detail)
//
dw_detail_items.SetChanges(lblob_detail_items)
dw_master.ResetUpdate()
dw_detail.ResetUpdate()
dw_detail_items.ResetUpdate()
if ll_row > 0 then
dw_master.SetFocus()
dw_master.SetColumn(gen_number)
il_gen_num = Long( String( ll_rtn))
dw_master.SetItem(ll_row, gen_number, il_gen_num)
dw_master.SetItemStatus(ll_row, gen_number, Primary!, NotModified!)
end if
End If
(Editors note: code starts on next page. For your convenience, the code will be available for download from
our website at http://www.powertimes.com. Look under
Resources.)
New <Identity Column> number is getting a new system-generated value as an identity column, but because
of a bug, after DataWindow synchronization this value is
not shown on the client screen. Even if you set the properly Identity Column in DataWindow painter (actually
it is part of a more common problem: if you SetItem()
between GetChanges() and Update() functions, these
changes are made in the database, but not on the client
Page 11
PowerTimes
/*******************************************************
Object
: n_bo_jag
Function : of_update
Access
: Public
Desc.
: Update data through appropriate DataWindow object, passed as parameter
Args
: String as_error ( by ref ) Store Error Message
Blob ablob_master ( by ref ) - for d_master synchronization
Blob ablob_detail ( by ref ) - for d_detail synchronization
Blob ablob_detail_items ( by ref ) - for d_detail_items synchronization.
String as_user - current user for statistic
Long al_gen_num. If there was no changes in the dw_master DataWindow, we cant get
po number from their blob, so we pass it as a parameter
Returns :
Long
*******************************************************/
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
We need update all DataWindows in one transaction. Because we use stateless components,
after every method invocation, all transaction will be completed and component will lose
the state.
Thats why we need make all updating and completing transaction in one function call
(this function).
So we need to pass in this function blobs for all our DataWindows.
If some of DataWindows was not changed, SetChanges() function return -1 !? So before
dealing with a
DataWindow I check if this DataWindow was changed( Len( ablob_...) <> 0
PFC Linkage service like situation:
When we are going to update chain of related DataWindows, the sequence of updating is
very important.
- If we insert row in the Master DataWindow we must first update Master DataWindow and
then Detail DataWindow,
or user will get Database Error Message like: Row in Parent table is not found
- If we delete row from the Master DataWindow we must first update Detail DataWindow and
then - Master DataWindow,
or user will get message like: Cannot delete record, because records in Child Table is
found. Actually we can avoid this
message if, in the DataWindow update property set Cascade Delete, but this decision is
very dangerous and not recommended.
We use here the same logic as PFC Linkage service does:
1. Update Detail DataWindow, Delete part only. We pass to the of_Update_Linkage_DW()
function D parameter. It is
mean that before issuing SQL statement for ids_data, the SQLPreview() event is fired.
There we check if Delete statement
is passed and is_UpdatesAllowed = D, then go ahead, if Update or Insert statement
are issued, then stop.
2. The same manner we completely Update MasterDataWindow( Update, Insert and
Delete statements).
3. At last we update Detail DataWindow Update and Insert parts only
In Purchase Order case we have more complicated situation: dw_master - Master DataWindow,
dw_detail detail DataWindow of this Master, and dw_detail_items - the Detail of dw_detail.
In this case the order of updating like that:
1. Update dw_detail_items Detail DataWindow, Delete part only.
2. Update dw_detail Detail DataWindow, Delete part only.
3. Update dw_master MasterDataWindow( Update, Insert and Delete statements).
4. Update dw_detail MasterMasterDataWindow( Update and Insert statements).
5. Update dw_detail_items Detail DataWindow, Update and Insert parts only.
It is important to keep of_Update_Linked_DW() function is private. In this case the n_bo_jag
component wont loose the state and it wont close transaction! Remember we have to
close Transaction
ourselves in the end of this function, if all updating were successful.
Long ll_test
long ll_ind, ll_count
string ls_product_id, ls_serial_num
long ll_manuf_id
DateTime ldt_today
boolean lb_transaction_good = TRUE
dwItemStatus l_stat
Double ll_rc
Continued on page 12
Page 12
PowerTimes
il_gen_num = al_gen_num
// Updating the Detail Items DataWindow, Delete part
if Len( ablob_detail_items ) <> 0 then
// check if there were changes in d_detail_items DataWindow
if this.of_Update_Linked_DW( d_detail_items, D, as_user, ablob_detail_items, &
as_error) < 0 then
lb_transaction_good = FALSE
GOTO Quit
end if
End if
// Updating the Detail DataWindow, Delete part
if Len( ablob_detail ) <> 0 then
// check if there were changes in d_detail DataWindow
if this.of_Update_Linked_DW(d_detail, D, as_user, ablob_detail, as_error) < 0 then
lb_transaction_good = FALSE
GOTO Quit
end if
End if
// Updating the Master DataWindow, all parts
if Len( ablob_master ) <> 0 then
// check if there were changes in d_master DataWindow
if this.of_Update_Linked_DW( d_master, UID,as_user, ablob_master, as_error) < 0 then
lb_transaction_good = FALSE
GOTO Quit
Else
// Because of DW Synchronization - Identity column problem, store it in il_gen_num,
// then we will get it from of_GetIdentityColumnValue() function.
if ids_data.RowCount() > 0 then
il_gen_num = ids_data.GetItemNumber( 1, gen_number )
ll_rc = ids_data.GetChanges(ablob_master)
// Probably here we are loosing Identity Column Value
end if
End if
// Updating the Detail DataWindow, Update/Insert
if Len( ablob_detail ) <> 0 then
// check if there were changes in d_detail DataWindow
if this.of_Update_Linked_DW(d_detail, UI, as_user, ablob_detail, as_error) < 0 then
lb_transaction_good = FALSE
GOTO Quit
else
ll_rc = ids_data.GetChanges(ablob_po_item)
end if
End if
// Updating the Detail Items DataWindow, Update and Insert parts
if Len( ablob_detail_items ) <> 0 then
// check if there were changes in d_detail_items DataWindow
if this.of_Update_Linked_DW( d_detail_items, UI, as_user, ablob_detail_items, &
as_error) < 0 then
lb_transaction_good = FALSE
GOTO Quit
else
ll_rc = ids_data.GetChanges(ablob_detail_items)
end if
End if
Quit: if lb_transaction_good then
If ib_distributed Then
its_jag.SetComplete()
Else
Commit Using itrans;
if itrans.SQLCode <> 0 then
Continued on page 13
Page 13
PowerTimes
as_error = SQL Error during committing the transaction~n + &
String( itrans.SQLDBCode ) + : + itrans.SQLErrText
ll_rc = -1
end if
End If
ll_rc = il_gen_num
Else
If ib_distributed Then
its_jag.SetAbort()
iel_jag.log ( as_user + : + Classname() + . of_update(). Error : + as_error )
Else
Rollback Using itrans;
End If
ll_rc = -1
RETURN ll_rc
End If
if
else
RETURN ll_rc
end if
//********************************************************************************
//
//
Object:
n_bo_jag inherited from n_bo_ancestor
//
Function:
of_update_linked_dw
//
Access:
protected
//
Argument
s:string as_dw_name
//
string as_updates
//
string as_user
//
ref blob ablob_notes
//
ref string as_error
//
Returns:
integer
//********************************************************************************
long ll_rc, ll_ind, ll_count
string ls_product
ids_data.DataObject = as_dw_name
ids_data.SetTransObject( itrans )
ll_rc = ids_data.SetChanges( ablob_dw )
If ll_rc = 1 Then
ids_data.of_SetUpdatesAllowed( as_updates)
if Pos( as_updates, I) > 0 then
// if you try insert row
ll_count = ids_data.RowCount()
FOR ll_ind = 1 TO ll_count
ids_data.SetItem( ll_ind, last_update_userid, as_user)
ids_data.SetItem( ll_ind, last_update_dt, DateTime( Today(), Now()))
NEXT
end if
Continued on page 14
Page 14
PowerTimes
CHOOSE CASE as_dw_name
CASE d_detail
if Pos( as_updates , I) > 0 then
// if you try insert row
FOR ll_ind = 1 TO ll_count
// Copy common field from Parent DW to Child DW:
ids_data.SetItem( ll_ind, gen_number, il_gen_num)
NEXT
end if
if as_updates <> D then
// if you are not deleting the rows
//Update Product table
< Here is some logic for updating related to this transaction tables>
CASE d_detail_items
if Pos( as_updates , I) > 0 then
FOR ll_ind = 1 TO ll_count
NEXT
end if
END CHOOSE
ll_rc = ids_data.Update( TRUE, FALSE)
If ll_rc = 1 Then
// Dont drop the update flags, if you process Delete part only
if as_updates <> D then
ids_data.ResetUpdate()
as_error =
Else
as_error = as_user + : SQL Error for + as_dw_name + : + &
String( ids_data.of_get_sqldbcode() ) + : + &
ids_data.of_get_sqlerrtext()
return -1
End If
Else
as_error = as_user + : Error setting changes for + as_dw_name + &
~n+ this.of_SetChangesMsg( ll_rc )
End If
return ll_rc
I know some people who will stop reading this part after
seeing the words statefull component. Statefull components are considered Jaguars resource eaters. But this
is not true - if we handle them in right way.
Lets look closer on the n_update function. Statefull components consume Jaguar resources until they are destroyed.
A statefull components behavior will be exactly the same
as a stateless one, if after every remote function call we
destroy the instance of that component.
It is dangerous to create an instance of a statefull component somewhere in the windows Open() event and destroy it in the Close() event. In this case, the component
will hold Jaguars resources until the user finishes their
data entry or comes back from lunch.
The lifetime of the n_update component will be from when
the user clicks the Save button until Jaguar issues
SetAbort() or SetComplete(). It will take approximately
the same time as if we use a stateless component, passing
1-8 blobs to the only of_Update() function. This difference will hit Jaguar very hard.
Page 15
PowerTimes
So, I propose to create two functions in the n_update component:
1. of_Update( <DataObject name>, blob, )
Here we call the ids_datastore.Update() function. If it is
fails, call SetAbort() function. In this case the whole transaction will be aborted and n_update destroyed immediately.
2. of_Commit().
Here we call SetComplete(), the transaction is committed and n_update is destroyed immediately.
Actually you can create these two functions from your
of_Update() that you use in the stateless component by
just moving the last part of code with SetComplete() to
the of_Commit function.
On the client side we have next schema (if you use PFC,
if not the schema is similar). When the user clicks the
Save button, the pfc_save() event is fired on a window
inherited from w_main. This event triggers the following events:
lpo_objs[1]
lpo_objs[2]
lpo_objs[3]
lpo_objs[4]
w_main.pfc_BeginTrans()
Here well call CreateInstance( n_update). Its better to
put this code in w_main.
u_dw.pfc_Update()
Will be in a loop for all DataWindows that have an update pending. For every DataWindow in this event well
call
the
remote
function
inv_update.of_update(this.DataObject,lblob_1, )
To summarise: this approach will allow you to easily upgrade any of your application to a 3-tier model. It is very
simple, it allows Jaguar to handle DataWindow updating
on a one by one basis and not in a single 8 blob hit.
Order
for
dw_1
dw_2
dw_3
dw_4
return this.of_SetUpdateObjects(lpo_objs)
w_main.pfc_EndTrans()
Here
well
call
the
remote
function
inv_update.of_Commit(). Again its better to put this in
w_main.
Setting Link
DataWindows
=
=
=
=
Updating
PowerTimes
PRODUCT OVERVIEW: OPTIMIZING SOFTWARE
DEVELOPMENT
PROJECTS
by Jean Aeschbach
StarTeam Overview
Introduction
High speed high change is today for many software
development projects the name of the game, especially in
the E-Business area. In order to keep pace in such a high
demanding environment and to stay away from chaos, it
is highly recommended to use well-known project management principles combined with best-of-breed tools.
StarTeam from Starbase Corporation is a project oriented,
collaboration toolset including configuration management, change management, task management and team
communication. It has been designed for ease of use and
is based on the Internet as the underlying communication infrastructure.
Also, the flexibility of the StarTeam model allows you to
finally manage all of your information assets, source code
as well as documentation, graphics and multimedia,
through a single coherent system. StarTeam is thus ideal
for all types of businesses and will help you optimise your
software development projects.
Virtual Team
Server
StarTeam
StarTeam Client
Client
Windows
WindowsInterface
Interface
StarTeam
Archive
StarTeam
StarTeam Web
Web Edition
Edition
Web
Web Browser
Browser
StarTeam
StarTeam Universal
Universal
Java
Java based
based Interface
Interface
StarDisk
StarDisk
PVCS
Archive
optional
VSS
Archive
ODBC
Database
Windows
Windows Explorer
Explorer Interface
Interface
IDE
IDE // SCC
SCC Interface
Interface
Oracle, SQL
Server, Sybase,
DB2, .
Custom
Custom Applications
Applications
COM/Java
COM/Java using
using StarTeam
StarTeam SDK
SDK
Clients
optional
TCP/IP
Projects Repository
PowerTimes
to convert existing SCM projects to StarTeam. It also offers
a command-line interface.
StarTeam Web Edition users access project repositories
via a standard web browser. It allows users to check files
in and out of a StarTeam, PVCS or VSS repository, as
well as, create, edit and report on change requests and
tasks and participate in team discussions.
The Universal Edition makes the graphical user interface
available on platforms that support Java version 1.1 or
higher. This allows Unix or Mac users to access the
StarTeam repository.
StarDisk allows users to access file revisions over TCP/
IP networks through a virtual StarDisk drive. StarDisks
integration with Windows Explorer provides transparent
access to some of the benefits of StarTeam.
Customized clients can also be created using StarTeams
SDK.
Repository
The backbone of the StarTeam system is the StarTeam
repository, which is supported by the StarTeam
VirtualTeam Server. This repository is an object-oriented
data store that supports object versioning, linking and
configurations. Any object (file, change request, topic,
task), known as a StarTeam item, stored in the repository
has its history recorded so that a prior state of the item
may be retrieved and restored. StarTeam items may be
linked to any other item in the repository so that the
relationships between the various information assets can
be maintained and used in your work processes.
Configurations containing many items can be created,
maintained and restored through the services of the
StarTeam repository.
Projects
StarTeam uses projects, views and folders to organize the
items stored in the StarTeam repository. A StarTeam
project is best thought of as a collection of closely related
views. Each view represents a configuration of items from
the repository and can support a different line of
development on the same code base. Folders cluster items
into groups. For example, you might want to check out
all the files in a folder to work on a particular feature of
your product. However, there are no restrictions on items
found in different projects. The items in a repository can
be moved or shared between any views, regardless of the
PowerTimes
rebuild 4.1 in the future or to allow a company
that wants to purchase your source code to review
that source code after signing a tentative
agreement.
Views
When you open a StarTeam project, you must either accept
the default (or main) view or select an alternate view.
The default view for a project typically contains the
configuration that is used for primary development.
Additional views can be derived from, that is created based
upon this view, and can take on different behaviors. The
selected view presents the items found in a particular
configuration.
Views typically have names such as Baseline, 4.0
Maintenance, Special 4.0 for Australia, and 5.0 New
Development. They represent configurations of items and
support different development baselines on the same code
base. Views can be compared and merged. For example,
you might want to merge files from both 4.0 Maintenance
and 5.0 New Development back into the Baseline view
eventually.
You can create and use views that:
Folders
Each StarTeam view contains a folder hierarchy used to
organize its items. Folders reflect the logical organization
of the configuration represented by the view. Folders
typically have names such as Source Code, Schedules,
and User Manuals. They group the items based on who
needs to access them or on the closely related nature of
the set of files in them. While folders can be organized
into any hierarchy, the structure typically follows the
structure of the working folders that the files are checked
out to.
Folders can also be useful when you need to create different
configurations of shared items. You can share folders,
files, change requests, tasks, and topics between and
within views so long as the views use the same server
configuration. When a folder is shared, users of both views
can access its contents, including child folders and their
contents.
Sharing folders can be an important part of setting up a
view. For example, suppose all products use the companys
general libraries to some extent. Even though those
libraries are not maintained by the developers of a given
product, the product is based on some revision of the
source code in them and must be compiled with it.
Therefore, some of the library folders should be shared
into the products view.
View Labels
Another feature of a StarTeam view is the view label. A
view label is used to identify static configurations
containing specific revisions of items in a view. When
you create a view label, it stores a time stamp for the
view. A view label gives you a static snapshot of the
dynamic view that it was created in.
Page 19
PowerTimes
Branching Views
A common operation in software development is to create
a new configuration that holds branched items based on
some prior static configuration. This is done whenever a
user wishes to perform maintenance on a previous build
of the system but does not want to affect the current
development. StarTeam supports this through branched
views.
Linking
Merging Views
The ability to link any item to any other item is a powerful StarTeam feature. Many customers use this feature to
record the relationships between items such as requirement documents (stored in files), specific change descriptions (stored in change requests), design discussions
(stored in topics) and source code changes (stored in files).
Since links can also be pinned (or attached) to specific
revisions of linked items, you have an environment that
provides complete tracability.
Page 20
PowerTimes
I L OVE YOU - NOT REALLY
by Rolf Andr Klaedtke
Countermeasures
What is KIX32.EXE ?
Page 21
PowerTimes
cluded a sample text file with a VBS extension
(text.txt.vbs). Once you have executed the above command successfully, you can double-click this sample file
and it should open in the editor, otherwise youll get an
error message announcing a VBScript compilation error.
Page 22
PowerTimes
LOOK WHATS OUT THERE
Websites introduced by Daniel Will-Harris
Page 23
PowerTimes
POWERTIMES: WHATS COMING ON THE WEBSITE
AND IN THE JOURNAL
by the editors
www.PowerTimes.com - whats new
Yes, we admit that there has not been going on a lot on
our website after the last redesign. We were all very busy
- but behind the scene a lot of work has been done.
So, what will be coming ? Look out for the following:
Polls
Very soon youll be able to share your opinion with
others and see the results online on our site. And youll
even have the possibility to submit your own questions to the PowerTimes community.
Event Calendar
Event organizers will have the possibility to enter their
event in our database, which will be searchable by
country, city, topic, etc. This can be user group meetings or technical conferences. That way, site visitors
know whats going on in what place. This can be especially helpful if youre on a trip in a foreign country or city and want to get information about the local
events.
Searchable database of authors and articles
This has been announced on our website already: youll
have the possibility to search our database for an author or an article or by keyword.
Links
There will be a dynamic link section: in fact, the links
are stored in a table which allows for categorization
and searching. We will also add a feature that allows
you to submit your most interesting links. These will
be reviewed prior to publication to insure that only
relevant links will be listed.
Other plans
We have in mind to create a new column called Introducing... where wed like to introduce PowerTimes readers to you. In fact, PowerTimes has subscribers all over
the world and we think it would be very interesting to
know a little about other people in other countries.
There will be a form online where readers can provide
some information and if picked by the editors, they will
soon be introduced in these pages.
While this doesnt sound very technical in a technical
journal, we believe that you will agree with us that human beings are very important and that it can indeed be
very interesting knowing more about them.
Oh, there will also be something technical: in fact, besides introducing readers (and why not authors ?) to you,
well also ask them to tell us their favorite internet links,
technical books or even provide a short technical tip.
Coming articles
Something to win...
Page 24